在实际开发过程中,查询数据经常要分页
实现查询分页可以借助PageHelper插件
首先引入pom包
<github.pagehelper.version>1.2.13</github.pagehelper.version>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${github.pagehelper.version}</version>
</dependency>
在配置文件中添加相关配置
pagehelper:
# dialect: ①
# 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式(可以不设置)
helper-dialect: oracle
# 上面数据库设置后,下面的设置为true不会改变上面的结果(默认为true)
auto-dialect: true
page-size-zero: false # ②
reasonable: false # ③
# 默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。(一般用不着)
offset-as-page-num: false
# 默认值为 false,RowBounds是否进行count查询(一般用不着)
row-bounds-with-count: false
#params: ④
#support-methods-arguments: 和params配合使用,具体可以看下面的讲解
# 默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页
auto-runtime-dialect: false # ⑤
# 与auto-runtime-dialect配合使用
close-conn: true
# 用于控制默认不带 count 查询的方法中,是否执行 count 查询,这里设置为false后,total会为-1
default-count: true
#dialect-alias: ⑥
定义页码和每页条数常量
private static final int PAGE_SIZE=1000;
private static int PAGE_NO=1;
1. 实现分页查询
PageHelper.startPage(PageUtil.initPageNo(PAGE_NUM),
PageUtil.initPageSize(PAGE_SIZE));
List<xx> xxList = xxlMapper.queryXx(ReqDto reqDto);
要注意的是这里的查询语句,要用唯一不会重复的字段进行Order by,然后每查询一次,页码数要加1
2.实现分页写入
Lists.partition(xxList,PAGE_SIZE).forEach(xxItemList-> {
xxAppMapper.insert(xxItemList);
});
但是需要主义的是,分页查询只对后面的第一条查询有效果,如果要多条查询分页,则需要对每条查询设置各自的分页逻辑。