【MyBatis】MyBatis分页插件PageHelper的使用

【MyBatis】MyBatis分页插件PageHelper的使用好多天没写博客了 因为最近在实习 大部分时间在熟悉实习相关的东西 也没有怎么学习新的东西 这周末学习了 MyBatis 的一个分页插件 PageHelper 虽然没有那么的强大 我在最后会说明它的缺点 但还是挺不错的 这篇博文主要来总结下如何使用 PageHelper 我们知道 在 mysql 中 分页的 sql 是使用 limit 来做 如果我们自己写 sql 那分页肯定是没有任何问题的 但是一旦 model 多

欢迎关注我新搭建的博客:http://www.itcodai.com/

  好多天没写博客了,因为最近在实习,大部分时间在熟悉实习相关的东西,也没有怎么学习新的东西,这周末学习了MyBatis的一个分页插件PageHelper,虽然没有那么的强大(我在最后会说明它的缺点),但还是挺不错的。这篇博文主要来总结下如何使用PageHelper。
  我们知道,在mysql中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的。但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了。
  可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了。在介绍如何使用这个分页插件之前,先介绍一下mybatis中的插件是如何工作的,主要作用在哪个环节。我之前有写过一篇mybatis的一篇入门文章:宏观上把我mybatis框架。里面有张mybatis的工作原理图,为了方便叙述,我把图也放在这:
这里写图片描述
  从图中可以看出,mybatis中首先要在配置文件中配置一些东西,然后根据这些配置去创建一个会话工厂,再根据会话工厂创建会话,会话发出操作数据库的sql语句,然后通过执行器操作数据,再使用mappedStatement对数据进行封装,这就是整个mybatis框架的执行情况。那么mybatis的插件作用在哪一环节呢?它主要作用在Executor执行器与mappedeStatement之间,也就是说mybatis可以在插件中获得要执行的sql语句,在sql语句中添加limit语句,然后再去对sql进行封装,从而可以实现分页处理
  搞清楚了分页插件的执行情况,下面来总结下mybatis中PageHelper的使用。










1. 需要引入PageHelper的jar包

  如果没有使用maven,那直接把jar包导入到lib文件夹下即可,这个PageHelper插件在github上有开源,地址为:https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper。
如果使用了maven,那么只要在pom.xml中引入该插件即可,引入如下:

<dependency> <groupId>com.github.pagehelper 
   groupId> <artifactId>pagehelper 
   artifactId> <version>4.1.4 
   version>  
   dependency>

2. 在mybatis的全局配置文件SqlMapConfig.xml中配置该插件

 
     <configuration>  
    <plugins> <plugin interceptor="com.github.pagehelper.PageHelper">  
    <property name="dialect" value="mysql"/>  
   plugin>  
   plugins>  
   configuration>

3. 在执行sql前添加插件,完成分页功能

  在查询的sql语句执行之前,添加一行代码PageHelper.startPage(1, 10);第一个参数表示第几页,第二个参数表示每页显示的记录数。这样在执行sql后就会将记录按照语句中设置的那样进行分页。如果需要获取总记录数的话,需要PageInfo类的对象,这个对象可以获取总记录数,下面看下测试的代码。

public class TestPageHelper { 
    @Test public void testPageHelper() { // 创建一个spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*"); // 从spring容器中获取mapper代理对象 TbItemMapper mapper = context.getBean(TbItemMapper.class); // 执行查询并分页,TbItemExample是逆向工程自动生成的,用来进行条件查询,这里不设置则表示无条件 TbItemExample example = new TbItemExample(); //分页处理,显示第一页的10条数据 PageHelper.startPage(1, 10); List 
  
    list = mapper.selectByExample(example); 
   //查询 
   // 取商品列表 
   for(TbItem item : list) { System.out.println(item.getTitle()); } 
   // 取分页信息 PageInfo 
   
     pageInfo = 
    new PageInfo 
    
      (list); 
     long total = pageInfo.getTotal(); 
     //获取总记录数 System.out.println( 
     "共有商品信息:" + total); } } 
     
    
  

看下执行的结果:

  可以看到,只显示出了10条数据,但是我总共有3096条数据,如果将参数改成(2,10),那么就会显示第二页不同的10条数据,在这就不测试了。这说明PageHelper插件可以帮助我们实现分页功能,例如EasyUI中就会传到后台分页参数信息,后台就可以根据参数获取分页数据等等。
  正如前面所说,这个PageHelper其实也有缺点,因为它对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常,上面是无条件查询的。当然,我们自己可以修改这个PageHelper插件,使其支持条件查询,当然,我是修改不了的……网上有修改过后的PageHelper插件,可以支持条件查询,相对来说就比较强大了,可以在自己的工程中依赖修改过后的分页插件进行开发。


扫码试读或 点此试读

这里写图片描述




文末福利:“程序员私房菜”,一个有温度的公众号~

程序员私房菜




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178011.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:14
下一篇 2026年3月26日 下午6:14


相关推荐

  • 也许有用(也谈VC中ModifyStyle&ModifyStyleEx无法改变控件的Style)[通俗易懂]

    也许有用(也谈VC中ModifyStyle&ModifyStyleEx无法改变控件的Style)[通俗易懂] 一个View中用到了一个CListCtrl,在OnInitialUpdate函数里面他调用了m_listCtrl.ModifyStyleEx(0,LVS_EX_FULLROWSELECT);但是结果是并没有改变View中这个ListCtrl的效果。     仔细的查阅了MSDN的关于ModifyStyleEx的说明,发现没什么可以的地方,调试几遍发现也没异常,最后在网上一搜索Modi…

    2022年7月19日
    22
  • LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11

    LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11TableofContentsSI静态部分和动态部分有两个部分。静态部件称为MIB动态部件称为SIBDetailSampleLTESystemInformationBlock(SIB)Contentssib1_decodedRELATEDLINKSAcknowledgementThesysteminformationisvery…

    2022年10月6日
    6
  • 从零开始:DeepSeek本地私有化部署完整教程

    从零开始:DeepSeek本地私有化部署完整教程

    2026年3月16日
    2
  • 因果图法_软件测试因果图怎么画

    因果图法_软件测试因果图怎么画一、黑盒测试:是一种常用的软件测试方法,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试。几种常用的黑盒测试方法和黑盒测试工具有,等价类划分法、边界值分析法、因果图法、决策表法。在实际运用中要选择合适的方法。二、因果图法:等价类划分法和边界值分析方法都是着重考虑输入条件,如果程序输入之间没有什么联系,采用等价类划分和边界值分析是一种比较有效的方法。如果输入之间有关系,例…

    2022年4月19日
    75
  • 月之暗面完成5亿美元C轮融资

    月之暗面完成5亿美元C轮融资

    2026年3月12日
    1
  • 免费流媒体服务器(AMS3.0 非AdobeMediaServer)

    免费流媒体服务器(AMS3.0 非AdobeMediaServer)自己从事流媒体近20载,从没有可用的流媒体服务器到现在服务器遍地开花.但尽管开源服务器众多,功能强大,但却没有可以直接拿来使用的.原因是配置安装困难,没有自己想要的接口,很难与现有系统对接.为解决这个问题,自己就做了一个简单的安装包,并且提供了众多的接口可以与WEB进行对接,这样配置管理大大简化,安装使用都非常简单.服务器单机下保守至少可以大码流3000并发吧,性能非常不错.你可以做集群.提供HTTPRTMP协议,支持HLS.详细可以看下面的使用说…

    2022年6月12日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号