编码技巧——Mybatis分页插件PageHelper使用
创始人
2024-02-25 16:00:16

本篇介绍Mybatis分页插件PageHelper的使用,本质上是Mybatis拦截器起作用,在执行目标SQL之前添加count语句及拼接limit到目标SQL后面,这里不再赘述,Mybatis拦截器相关知识可参考Mybatis——拦截器Interceptor,本篇仅简单介绍如何让一个使用Mybatis+springboot的项目快速接入PageHelper;

背景:接到需求,需要对一个老工程新写几个分页查询及导出的接口;查看了这个工程的代码,发现历史的分页接口竟然是手动拼出来的,非常之丑陋,准备引入Mybatis自带的分页插件,顺带记录下遇到的问题和最终引入PageHelper的步骤;

遇到问题1:根据经验,只需要引入一个PageHelper的二方包,在springboot下,会自动注册Mybatis Interceptor并生效;发现SQL可以正常执行,但是分页参数都没有填充;所以问题应该是PageHelper并没有被正确的加入Mybatis拦截器列表,这一步可以通过打印原始的SQL来验证;

解决方案:继续引入pagehelper-spring-boot-starter并在配置类加载PageHelper的Bean;

遇到问题2:按照上述方案成功的引入了pagehelper,并且分页参数都被正常的填充;但是当把分页插件原生的com.github.pagehelper.Page作为返参返回时,发现缺失了分页参数如total、pageNum、pageSize等;发现Page其实仅继承了java.util.ArrayList,因此序列化的时候会当做一个List处理,分页参数都缺失了;

解决方案:自己封装分页返参实体类;

总结下正确引入Mybatis分页插件PageHelper的姿势

(1)引入依赖

以下依赖建议放到dal模块:

        com.github.pagehelperpagehelper5.2.0

以下依赖建议放到启动/配置boot模块

        com.github.pagehelperpagehelper-spring-boot-starter1.2.12

(2)配置Bean

@Configuration
public class PageHelperConfig {@Beanpublic PageHelper pageHelper() {PageHelper pageHelper = new PageHelper();Properties properties = new Properties();properties.setProperty("offsetAsPageNum", "true");properties.setProperty("rowBoundsWithCount", "true");properties.setProperty("reasonable", "true");properties.setProperty("dialect", "mysql");pageHelper.setProperties(properties);return pageHelper;}
}

(3)封装返参

/*** @author Akira* @description 默认的分页查询的封装类*/
@Data
public class DefaultPageDTO {/*** 页码*/private Integer pageNum;/*** 页面大小,默认size为10*/private Integer pageSize;/*** 总数*/private Long total;/*** 总页数*/private Integer pages;/*** 查询记录列表*/private List records;/*** 将com.github.pagehelper.Page封装成能打印出分页参数的DefaultPageDTO** @param page* @param * @return*/public static  DefaultPageDTO init(Page page, Function converter) {DefaultPageDTO defaultPageDTO = new DefaultPageDTO<>();defaultPageDTO.setPageNum(page.getPageNum());defaultPageDTO.setPages(page.getPages());defaultPageDTO.setTotal(page.getTotal());defaultPageDTO.setPageSize(page.getPageSize());if (page.getTotal() > 0) {defaultPageDTO.setRecords(page.getResult().stream().map(converter).collect(Collectors.toList()));}return defaultPageDTO;}}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...