Mybatis-Plus⼊门系列(2)-MybatisPlus之分页插件Paginatio。。。
前⾔
MybatisPlus版本:3.4.2
Plus源码中,分页插件相关代码位于mybatis-plus-extension包下。
分页⽅⾔:众所周知,每个数据库都有⾃⼰的⽅⾔,⽐如MySQL 的分页是⽤关键字 limit, ⽽ Oracle ⽤的是 ROWNUM,dialects包下对匹配了众多数据的分页⽅⾔,⽐如 DB2、MySql、Oracle、SQLServer等。
分页模型:采⽤Page作为统⼀的简单分页模型,封装了查询数据列表、总数、每页显⽰条数(默认 10)、当前页、排序字段信息等内容。
直接使⽤
默认分页查询
1. 参照⼊门⽂档搭建项⽬,配置分页插件
@Configuration
@EntityScan("org.ity")
@MapperScan(basePackages ="org.der.**.dao", markerInterface = BaseMapper.class)
public class MyBatisPlusConfig {
/**
*  插件集合
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//  插件
MybatisPlusInterceptor interceptor =new MybatisPlusInterceptor();
// 分页插件
PaginationInnerInterceptor paginationInnerInterceptor =new PaginationInnerInterceptor(DbType.MARIADB);
// 添加分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
2. 编写测试接⼝,查询某表数据,实现在表中插⼊了1W+测试数据。
@GetMapping("testPage")
public Object testPage(){
//  分页查询对象,未添加任何分页参数
Page<OrderTbl> page=new Page();
Page<OrderTbl> orderTblPage = orderTblService.page(page);
return orderTblPage;
}
3. 调⽤测试接⼝,可知plus查询分页对象当前页的默认值为1,分页条数为10,countId未设置,最⼤分页数量默认⽆限制。
⾃定义分页对象查询
1. 配置当前页及每页条数(也可通过构造⽅法配置)
Page<OrderTbl> page=new Page<>();
// 设置分页查询参数
page.setCurrent(1);
page.setSize(10000L);
2. ⾃定义count查询语句分页查询插件
Mapper:
public interface OrderTblMapper extends BaseMapper<OrderTbl>{
//  ⾃定义count
Long myCount();
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.der.dao.OrderTblMapper">
<select id="myCount" resultType="java.lang.Long">
select  count(id) from order_tbl
</select>
</mapper>
配置countId
// 设置分页查询参数
page.setSize(10000L);
page.setCurrent(1);
// countId可写mapper接⼝⽅法,也可以带全路径包名
page.setCountId("myCount");
测试发现,已经使⽤了⾃定义的⽅法进⾏count查询。
3. 分页限制,防⽌溢出
page.setMaxLimit(100L);
测试发现:虽然配置每页条数为1W,但是因为设置了MaxLimit,只返回了100条数据。
4. 关闭count,默认true(打开)
page.setSearchCount(false);
测试:没有打印count查询语句,总条数为0
5. 是否优化COUNT SQL,默认值为true。
不优化时count Sql打印如下,会对查询语句的结果集再进⾏count处理,效率不⾼
分页插件配置
PaginationInnerInterceptor作为plus的分页插件,提供了通⽤的参数进⾏统⼀配置。
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//  插件
MybatisPlusInterceptor interceptor =new MybatisPlusInterceptor();
// 分页插件
PaginationInnerInterceptor paginationInnerInterceptor =new PaginationInnerInterceptor();
// 设置最⼤分页数
paginationInnerInterceptor.setMaxLimit(100L);
// 是否对超过最⼤分页时做溢出处理
paginationInnerInterceptor.setOverflow(true);
/
/ 设置数据库类型
paginationInnerInterceptor.setDbType(DbType.MARIADB);
//paginationInnerInterceptor.setProperties();
// paginationInnerInterceptor.setDialect();
//paginationInnerInterceptor.setOptimizeJoin();
// 添加分页插件
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
1. setMaxLimit: 设置最⼤分页数
2. setOverflow:是否对超过最⼤分页时做溢出处理,默认false不处理,即直接丢弃溢出的数据,为true时,怎么把溢出数据放⼊到下
⼀个分页中。
3. setDbType:设置数据库类型以匹配不同⽅⾔
4. setDialect: 设置分页⽅⾔
5. setOptimizeJoin:优化Join分页语句,默认true