mybatis-plus 基本应用
前言
现在越来越多的项目使用mybatis-plus来替换mybatis,相较于mybatis,plus更注重于逻辑,不用手动的在xml中编写sql,所以写下这篇文章用来记录自己的学习内容。
一、将mybatis-plus引入spring项目
在pom文件中添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
在配置文件中添加配置
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/plustest
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#想要查看执行的 sql 语句
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在实体类中添加@TableName(“user”)
在mapper接口中继承BaseMapper接口,泛型添加实体类对象
二、动态条件查询QueryWrapper
1.查询user表中姓名包含q,并且年龄在12到15之间,并且id为5的数据
条件的第一个参数为字段名称
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.like("name", "q").
between("age", 12, 15).
le("id", 5);
return mapper.selectList(userQueryWrapper);
2.设置查询字段为name,age
userQueryWrapper.select("name", "age");
3.查询优先级,查询姓名中包含q,年龄小于15或邮箱为空的数据
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.select("name", "age");
userQueryWrapper.like("name", "q").
and(i -> i.lt("age", 15).or().isNull("email"));
return mapper.selectList(userQueryWrapper);
4.LambdaQueryWrapper 查询姓名中包含q,年龄小于15或邮箱为空的数据
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.like(User::getName,"q")
.and(i -> i.lt(User::getAge,15).or().isNull(User::getEmail));
return mapper.selectList(userLambdaQueryWrapper);
5.分页查询
selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);
需要传入Page对象,size为每页的数据量,current为第几页,Page对象是有泛型的,泛型为实体类
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.like(User::getName,"q")
.and(i -> i.ge(User::getAge,1).or().isNotNull(User::getEmail));
Page<User> userPage = mapper.selectPage(page, userLambdaQueryWrapper);
ResPageEntity<User> instance = ResPageEntity.instance(userPage);
return instance;
}
返回结果
数据集合在records里面,total代表所有数据个数,size表示当前页数据个数,current代表当前是第几页,pages表示一共有几页
可能会遇到分页查询失效状态,可以在启动类中注入MybatisPlusInterceptor
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
在启动类加上mapper扫描注解
@MapperScan("com.xxx.mapper")
三、UpdateWrapper
将名字中带有q的数据邮箱改为csdn
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.like(User::getName,"q").set(User::getEmail,"csdn");
User user = new User();
mapper.update(user,wrapper);
注意:里面的实体类一定要创建并且放进去,否则会报错
也可以用下面的这种方法,在更新的时候插入要修改的内容而不是在wrapper里面set,如果不需要在wrapper里面set的话也可以采用QueryWrapper的方式
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.like("name","q");
User user = new User();
user.setEmail("csdn");
mapper.update(user,wrapper);
总结
通过上述内容,已经可以初步的运用mybatis-plus,可以简化sql的编写,使后端人员更加注重逻辑的编写,自己的学习笔记,如有错误请多指正