[toc]
MybatisPlus扩展笔记
更新字段为 null
情景介绍
在使用 mybatis-plus 进行开发时,默认情况下当 mybatis-plus 在更新数据时时会判断字段是否为 null,如果是 null 则不会更新该字段的值(update语句中没有该字段),也就是更新后的该字段数据依然是原数据。
虽然说这种方式在一定程度上可以避免数据缺失等问题,但是在某些业务场景下我们就需要更新某些字段的数据为 null。
解决方法
可以在实体类上设置该字段的字段策略。将该字段的字段策略设置为忽略即可。
@TableField(updateStrategy = FieldStrategy.IGNORED)
java
public class Student {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(value = "name",updateStrategy = FieldStrategy.IGNORED) // 设置字段策略为忽略
private String name;
//....
}
当设置策略之后,我们需要更新name字段为null的时候,就不会出现无法更新的情况。
分页
分页可分为逻辑分页和物理分页。
- 逻辑分页是指一次性把全部数据查询出来加载进内存中,然后通过逻辑操作将全部数据进行分页。优点是减少了数据库I/O次数(只查询一次),适合频繁访问、数据量少的情况。缺点是不适合大数据量,全部数据加载到内存中容易造成内存溢出。
- 物理分页是指利用SQL的limit 关键字。直接在数据库中进行分页查询。优点是适合大数据量。缺点是频繁查询数据库,增大了数据库的I/O次数,从而消耗数据库的性能。
mybatisplus 实现分页的方式有2种
- 直接使用内置的分页插件来进行分页。(不手写SQL的情况下)
- 直接使用内置的分页插件来进行分页。(手写SQL的情况下)
首页先要配置mybatiplus的分页插件
java
@Configuration
@MapperScan("com.shuyx.shuyxuser.mapper") //指明mapper接口的位置
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
return interceptor;
}
}
不手写SQL的情况
不手写SQL的情况是指直接调用mybatisplus的分页方法来进行分页。
- 优点:对于单表分页查询,这样很方便。
- 确定:对于多表联查的分页查询。可以通过另一个框架mybatisplus-join来完成。
java
//分页查询
@Override
public Object pagelist(UserDTO userDTO) {
QueryWrapper<UserEntity> queryWrapper = new QueryWrapper<>();
//用户名称查询
if(StringUtils.isNotBlank(userDTO.getUserName())){
queryWrapper.like("user_name",userDTO.getUserName());
}
//分页设置
Page<UserEntity> page = new Page<>();
page.setCurrent(userDTO.getPageNum());
page.setSize(userDTO.getPageSize());
//开始分页查询,直接调用selectPage分页方法进行分页查询
Page<UserEntity> list = userMapper.selectPage(page, queryWrapper);
//查询出来的分页数据
system.out.println(list)
}