今天刚好为了搭建一个项目来学习新的东西,就是用了springboot+mybatis,前面整合阶段没有什么难点,所以就记录下集成分页插件的方法,分页功能在网站和管理系统都有用到,是必不可少的功能。在MyBatis中提供了拦截器接口,我们可以使用PageHelp最为一个插件装入到SqlSessionFactory,实现拦截器功能。

一、实现

首先pom.xml文件中添加依赖包

com.github.pagehelper pagehelper 4.1.0

创建MybatisConf类

@Configurationpublic class MybatisConfig { /** * 配置分页插件 * * @author wangyu * @Date 2018/9/3 16:20 */ @Bean public PageHelper pageHelper() { System.out.println("MyBatisConfiguration.pageHelper()"); PageHelper pageHelper = new PageHelper(); Properties p = new Properties(); p.setProperty("offsetAsPageNum", "true"); p.setProperty("rowBoundsWithCount", "true"); p.setProperty("reasonable", "true"); pageHelper.setProperties(p); return pageHelper; }}

创建Page分页对象,自己手动简单的封装一个page

/** * @author wangyu * @Date 2018-09-03 16:03 */public class Page { // 当前页 private Integer currentPage = 1; // 每页显示的总条数 private Integer pageSize = 10; // 总条数 private Integer totalNum; // 是否有下一页 private Integer isMore; // 总页数 private Integer totalPage; // 开始索引 private Integer startIndex; // 分页结果 private List items; // 分页参数 private Map param; public Page() { super(); } public Page(Integer currentPage, Integer pageSize, Integer totalNum) { super(); this.currentPage = currentPage; this.pageSize = pageSize; this.totalNum = totalNum; this.totalPage = (this.totalNum + this.pageSize - 1) / this.pageSize; this.startIndex = (this.currentPage - 1) * this.pageSize; this.isMore = this.currentPage >= this.totalPage ? 0 : 1; } public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalNum() { return totalNum; } public void setTotalNum(Integer totalNum) { this.totalNum = totalNum; } public Integer getIsMore() { return isMore; } public void setIsMore(Integer isMore) { this.isMore = isMore; } public Integer getTotalPage() { return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getStartIndex() { return startIndex; } public void setStartIndex(Integer startIndex) { this.startIndex = startIndex; } public List getItems() { return items; } public Page setItems(List items) { this.items = items; return this; } /** * 获取参数 * @return */ public Map getParam() { if(param == null){ param = new HashMap(); } return param; } /** * 设置参数 * @param param */ public void setParam(Map param) { this.param = param; }}

二、使用

在这里自己实现了一个基类的BaseService 封装了大部分可重用的方法,其业务service实现了它。所以可以直接使用其中的分页查询的方法

@Override public Page findList(Page page) { if (page == null) { return null; } List records = baseMapper.findList(page.getParam()); int countNums = records.size(); page = new Page<>(page.getCurrentPage(),page.getPageSize(),countNums); page.setItems(records); return page; }

所以当controller接受参数之后可以直接调用该方法

@RequestMapping(value = "/findCondition", method = RequestMethod.POST) public ResponseModel findCondition(@RequestBody Page page) { page = userService.findList(page); return ResponseModel.newOk(page); }

这样就能成功的分页,亲测有效。后续补上带有前端页面的分页整体实现。

如有不足之处,欢迎留言,需要demo可以私信我,让我们共同进步。如果你觉得有阅读和收藏价值,请关注本人,编程之家,每天为你分享编程相关知识。

关注,每天为你分享

查看原文 >>
相关文章