一、简介
1、MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开 发、提高效率而生。可以节省大量时间,大部分的 CRUD (增查改删)代码都可以自动化完成。
2、其中封装了丰富的查询操作api,尤其是单表操作的API,相比于SpringJPA来说,好处多多。
二、应用
1、导入依赖(尽量不要同时导入mybatis 和 mybatis_plus,避免版本差异)
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mybatis plus生成器依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--velocity模版依赖-->
<dependency>
<artifactId>velocity</artifactId>
<groupId>org.apache.velocity</groupId>
<version>${velocity.version}</version>
</dependency>
2、配置
application.yml 文件:
mybatis-plus:
#配置日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/${project.database}/**/*.xml,classpath:mapper/*.xml
global-config:
db-config:
logic-delete-value: 0
logic-not-delete-value: 1
logic-delete-field: deleted
spring boot 启动类中添加 @MapperScan 注解,扫描Mapper文件夹:
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
@MapperScan("com.swimming.project.mapper")
public class ProjectApplication {
mapper 上面添加 @Mapper 注解,并继承 BaseMapper<> 类:
@Mapper
public interface UserMapper extends BaseMapper<User> {
//所有的CRUD都已经完成
//不需要像以前一样配置一大堆文件:pojo-dao
}
3、使用
@Service
@Slf4j
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
// 查询全部用户,参数是一个Wrapper,条件构造器,先不使用为null
public void selectList(){
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
// 通过 Id 查询用户:
public void selectById(){
User user = userMapper.selectById(1L);
System.out.println(user);
}
// 通过 Id集合 查询用户:
public void selectBatchIds(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
users.forEach(System.out::println);
}
// 自定义查询
public void selectByMap(){
HashMap<String,Object> map = new HashMap<>();
map.put("name","张三");
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
}
// 修改
public void updateById(){
User user = new User();
//可以通过条件自动拼接动态SQL
user.setId(5L);
user.setName("李四");
int i = userMapper.updateById(user);
System.out.println(i);
}
// 删除
public void deleteById(){
userMapper.deleteById(4L);
}
// 批量删除
public void deleteBatchIds(){
userMapper.deleteBatchIds(Arrays.asList(1L,2L));
}
// 根据 Map 删除
public void deleteByMap(){
Map<String, Object> map = new HashMap<>();
map.put("name","李四");
userMapper.deleteByMap(map);
}
//条件构造器Wrapper,可以构造复杂的SQL
void WrapperTest(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("name") //指定字段不为空
.ge("age",10);//指定字段值必须大于给定value
userMapper.selectList(wrapper).forEach(System.out::println);
//equals (查询一个数据出现多个结果就使用 List 或 Map 接收)
wrapper.eq("name","张三");
User user = userMapper.selectOne(wrapper);
System.out.println(user);
wrapper.between("age", 19, 23);
Long count = userMapper.selectCount(wrapper);//查询结果数
System.out.println(count);
// orderByAsc 通过ID进行排序
wrapper.orderByAsc("id"); //通过id升序
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
// like(String columnName, value):模糊查询,like %value%
// notLike():not like %value%
// likeRight()、likeLeft():左、右代表 % 存在的位置。
wrapper.notLike("name","a") //查询姓名中不包含a的用户
.likeRight("email","t"); //左和右是代表%的位置 两边都要匹配则为%e%,这里是email以t开头的 t%
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
maps.forEach(System.out::println);
// 联表查询
// inSql(String keyColumnName, String sql):
// 联合查询,选择与主查询关联的字段,并设置 子表的 sql
wrapper.inSql("id","select id from user where id < 4");
List<Object> objects = userMapper.selectObjs(wrapper);
objects.forEach(System.out::println);
}
}