1.概述

在做系统的过程中,分页查询是我们经常遇到的一个场景,我们可以借助mybatis分页插件方便的实现分页功能,本文分享怎样使用mybatis分页插件。

2.mybatis分页插件使用

mybatis分页插件使用包括两个步骤

  1. 引入mysql依赖和分页插件依赖。
  2. 使用分页插件编写代码。
    下面分别详细说一下

2.1 引入mysql依赖和分页插件依赖

pom依赖代码如下所示:

<!--Mysql Start-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version>
</dependency>
<!--Mysql End--><!--mybatis分页插件  START-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version>
</dependency>
<!--mybatis分页插件  END-->

2.2 使用分页插件编写代码

分页插件的使用有好几种方式,这里我分享比较简单直观的一种,使用PageHelper的方式,代码如下所示:

public PageInfo<App> appPageInfo(int pageNum, int pageSize) {try {if(pageNum < 0) {pageNum = 1;}if(pageSize < 0) {pageSize = 10;}//取第pageNum页的pageSize条内容,默认查询总数countPageHelper.startPage(pageNum, pageSize);//紧跟着PageHelper的第一个select方法会被分页List<App> apiList =  appMapper.selectAllApp();//用PageInfo对结果进行包装PageInfo<App> info = new PageInfo(apiList);return info;} catch (Exception e) {return null;}
}

PageInfo对查询结果进行了封装,PageInfo里有很多有用的信息,例如:

info.getPageNum();
info.getPageSize();
info.getStartRow();
info.getEndRow();
info.getTotal();
info.getPages();
info.getNavigateFirstPage();
info.getNavigateLastPage();
info.isIsFirstPage();
info.isIsLastPage();
info.isHasNextPage();
info.isHasPreviousPage();
info.getList();

2.2.1 PageHelper分页注意事项

PageHelper虽然简单直观,但是它可能导致不安全的分页,主要原因是PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。需要保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,只要可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。
      这样的代码就是不安全的用法。

PageHelper.startPage(1, 10);
List<User> list;
if(param1 != null){list = userMapper.selectIf(param1);
} else {list = new ArrayList<User>();
}

需要修改成这样

List<User> list;
if(param1 != null){PageHelper.startPage(1, 10);list = userMapper.selectIf(param1);
} else {list = new ArrayList<User>();
}

也可以采用手动清除的方式,虽然很不好看

List<User> list;
if(param1 != null){PageHelper.startPage(1, 10);try{list = userMapper.selectAll();} finally {PageHelper.clearPage();}
} else {list = new ArrayList<User>();
}

更详细的使用方式请参考官方文档:Mybatis Pagehelper
      也可以参考 Java8函数式编程介绍及分页查询实战 文章的方式,写出更优雅的分页代码。

总结

本文分享了mybatis分页插件的使用方式及注意事项。

2. mybatis分页插件使用相关推荐

  1. springboot整合mybatis分页插件

    1.springboot版本为2.0.1,数据库为mysql,引入pagehelper的pom依赖 <!--mybatis分页插件--> <dependency><gro ...

  2. 解决使用mybatis分页插件PageHelper的一个报错问题

    解决使用mybatis分页插件PageHelper的一个报错问题 参考文章: (1)解决使用mybatis分页插件PageHelper的一个报错问题 (2)https://www.cnblogs.co ...

  3. MyBatis分页插件PageHelper使用练习

    转载自:http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/HowToUse.markdown 1.环境准备: 分页插件p ...

  4. MyBatis学习总结(17)——Mybatis分页插件PageHelper

    2019独角兽企业重金招聘Python工程师标准>>> 如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊 ...

  5. (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示

    http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...

  6. Mybatis:Mybatis分页插件

    文章目录 1. Mybatis分页插件 1.1 分页插件介绍 1.2 分页插件的使用 1.3 分页插件的参数获取 1.4 分页插件知识小结 分页助手相关 API 1. Mybatis分页插件 1.1 ...

  7. 使用abel533大神的mybatis分页插件总结

    今天使用了abel533大神的mybatis分页插件,遇到了写问题,特意在这里做个总结,方便以后查找. 首先该测试是在本人的ssm基础框架上实现的,有兴趣的可以先看看本人的博客置顶帖.高手就略过吧. ...

  8. Mybatis分页插件MybatisHelper的使用

    Mybatis分页插件MybatisHelper的使用 MybatisHelper是Mybatis的一个数据分页插件,是国内的一个牛人""刘增辉""所写,功能强 ...

  9. Mybatis分页插件PageHelper使用教程(图文详细版)

    Mybatis分页插件PageHelper使用教程(图文详细版) 1.配置 2.后台代码 controller类 html页面 html页面效果图 1.配置 小编的项目是springBoot项目,所以 ...

  10. mybatis分页插件的使用以及报错解决

    一.mybatis分页插件的前提配置 添加依赖 <dependency><groupId>com.github.pagehelper</groupId><ar ...

最新文章

  1. java web 程序---购物车项目内容:
  2. java的CountDownLatch使用
  3. audio 小程序 放大_码code | 小程序新能力释放,人人都能拥有对话机器人
  4. Angular应用里使用HTTP服务的一个具体例子
  5. LeetCode - 231. Power of Two - 判断一个数是否2的n次幂 - 位运算应用实例 - ( C++ )
  6. 西门子定时器有几种_【图】西门子step7功能块中定时器的类型与参数
  7. PVE系列教程(三)、安装黑威联通
  8. [经验教程]2022网线水晶头插座接头排线接线顺序与方法图解
  9. linux 多个ftp站点,vsftp在虚拟主机上建立多个ftp站点
  10. 计算机桌面ie图标无法删除,Win7桌面IE图标无法删除如何解决?
  11. 【新手案例】Python3.7如何获取网络时间
  12. 语法长难句之从句——名词性从句
  13. Android基础入门教程——2.4.2 ListView简单使用
  14. CDH/HDP迁移之路
  15. 网优5g前景_5G网络优化工程师的前景和待遇
  16. 今天,就让坏得很的糟老头子来告诉你顺序表的基操,零基础也可get!
  17. 《人物》:计算机世界第一人 - 艾兰·图灵
  18. 华为 MA567x, 如何从电信系统切回华为系统
  19. 练习4-7 求e的近似值 (15 分)
  20. Spring Boot使用Spring DeferredResult实现长轮询,纵享新丝滑让你体验丝滑般的感觉 - 第414篇

热门文章

  1. SRC挖洞之SSRF与XXE漏洞的实战案例
  2. hdmi linux 分辨率设置方法,话说你们的双屏显示器是怎样设置的 尤其是外接显示器分辨率设置...
  3. tringUtils工具之StringUtils.isNotBlank()
  4. 手机 机器人 谢超_我校学子在2020世界机器人大赛总决赛中荣获佳绩
  5. win10忘记开机密码,使用U盘解决问题(不用重装系统,不会丢失数据)
  6. 最新免费收录外链的分类目录网站大全
  7. 运动蓝牙耳机推荐,2022最值得入手的运动耳机
  8. 蓝牙耳机最优秀的保养方法,别再担心你的蓝牙耳机寿命短了~
  9. 企业微信推送消息延迟_企业微信发送应用消息的实现
  10. flowable中动态显示节点的审批人信息