springboot中mybatisplus2和mybatisplus3分页插件使用的区别及注意事项
为什么要用分页插件:
在实际工作中,可能有进行列表分页查询的场景,我们往往都需要做两个步骤:1. 查询所需页数对应数据;2. 统计符合条件的数据总数;而这,又会导致我们必然至少要写2个sql进行操作。这无形中增加了我们的工作量,另外,当发生需要变动时,我们又需要同时改动这两个sql,否则必然导致结果的不一致。并且,如果出现有数据库迁移的情况下,写的sql分页方式肯定又需要进行大量修改,此时引入分页插件自动进行分页就可以边喝茶边聊天轻松解决这类问题了。
mybatisplus分页插件支持的数据库
支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
mybatisplus2分页插件使用方式
引入2.3.3版本的mybatis-plus maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3.3</version>
</dependency>
分页插件需要配置mybatisplus分页拦截器
/**
* mybatis分页拦截器
*/
@Configuration
public class MybatisPlusConfig {
//mybatisplus2.+
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
// paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
// paginationInterceptor.setDialectType("sqlserver");
return paginationInterceptor;
}
}
mapper使用Page对象接收page分页参数,传到第一个进行绑定,mybatisplus会自动进行分页
service层:
// 第二页,第五条
Page<Map<String, Object>> page = new Page<>(2,5);
List<Map<String, Object>> result = baseMapper.getPage(page, entity);
mapper接口方法:
/**
* 分页
*
* @param page
* @param entity
* @return
*/
List<Map<String, Object>> getPage(@Param("page") Page<Map<String, Object>> page, @Param("entity") SysDictionary entity);
xml代码略
mybatisplus3分页插件使用方式
引入3.5.1版本的mybatis-plus maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
配置mybatisplus3.+分页插件
/**
* mybatis分页拦截器
*/
@Configuration
public class MybatisPlusConfig {
// mybatisplus3.+
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
//mybatisplus2.+ PaginationInterceptor已在3.5.1中移除, 使用会报错
// @Bean
// public PaginationInterceptor paginationInterceptor() {
// PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// // paginationInterceptor.setOverflow(false);
// // 设置最大单页限制数量,默认 500 条,-1 不受限制
// // paginationInterceptor.setLimit(500);
// // 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
// paginationInterceptor.setDialectType("sqlserver");
// return paginationInterceptor;
// }
}
mapper使用Page对象接收page分页参数,传到第一个进行绑定,mybatisplus会自动进行分页
service层:
// 第二页,第五条
IPage<Map<String, Object>> page = new Page<>(2, 5);
List<Map<String, Object>> page1 = baseMapper.listPageBy(page);
mapper层接口方法:
/**分页*/
List<Map<String, Object>> listPageBy(@Param("page") IPage<Map<String, Object>> page)
xml代码略
注意:
如果是从2.+升级到3.+的版本,进行传参分页那个位置因为包名从
com.baomidou.mybatisplus.plugins.Page
变成了
com.baomidou.mybatisplus.extension.plugins
com.baomidou.mybatisplus.core.metadata.IPage
所以涉及到分页的功能的代码都需要进行修改