关于MyBatis的搭建可以参见“MyBatis的配置”,MyBatis是对JDBC底层代码的封装,关于Oracle、MySQL、SqlServer的分页可以查看Oracle、SqlServer、MySQL的分页

MyBatis自带分页

关于分页,笔者首先使用MyBatis自带的分页方法:

  1. sqlSession.selectList("sql 的 id",sql 参数 ,RowBounds 对象

比如:

  1. RowBounds bound = new RowBounds(2,3);
  2. SqlSession session = MyBatisUtil.getSession();
  3. List<Dept> list = session.selectList("findAll", null, bound);

这样我们可以看到第2页的3的数据,但是这只是表面的。我们通过在MyBatis中主配置文件中开启日志输出,这样我们就可以在控制台中看到日志情况:

  1. <settings>
  2. <setting name="logImpl" value="STDOUT_LOGGING"/>
  3. </settings>

完整的MyBatis主配置文件如下:

  1. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  2. <configuration>
  3.  
  4. <!--引入数据库信息文件-->
  5. <properties resource="db.properties" />
  6.  
  7. <settings>
  8. <setting name="logImpl" value="STDOUT_LOGGING"/>
  9. </settings>
  10.  
  11. <environments default="environment">
  12. <environment id="environment">
  13. <transactionManager type="JDBC" />
  14. <dataSource type="POOLED">
  15. <property name="driver" value="${driverClassName}" />
  16. <property name="url" value="${url}"/>
  17. <property name="username" value="${username}" />
  18. <property name="password" value="${password}" />
  19. </dataSource>
  20. </environment>
  21. </environments>
  22. <!-- 加载SQL定义文件 -->
  23. <mappers>
  24. <mapper resource="cn/test/sql/DeptMapper.xml" />
  25. </mappers>
  26. </configuration>

sqlmap-config.xml

下面是运行的日志截图:

看到这个日志截图,我们可以看出结果的数据是正常的,但是总共查询的数据有问题。这是使用MyBatis自带的分页的弊端。

使用pageHelper分页

使用pageHelper的插件,我们需要下载pageHelper分页工具包。需要下载 pagehelper-5.0.0.jar 和 jsqlparser-0.9.5.jar 。笔者下载的是5.0.0的pagehelper,笔者需要注意pagehelper5.0.0以上和以下的配置完全不同,pagehelper下载

在主配置文件中添加:

  1. <plugins>
  2. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  3. <!-- 4.0.0以后版本可以不设置该参数 -->
  4. <!--<property name="dialect" value="mysql"/>-->
  5. <!-- 该参数默认为false -->
  6. <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
  7. <!-- 和startPage中的pageNum效果一样-->
  8. <property name="offsetAsPageNum" value="true"/>
  9. <!-- 该参数默认为false -->
  10. <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
  11. <property name="rowBoundsWithCount" value="true"/>
  12. <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
  13. <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
  14. <property name="pageSizeZero" value="true"/>
  15. <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
  16. <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
  17. <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
  18. <property name="reasonable" value="true"/>
  19. <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
  20. <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
  21. <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
  22. <!-- 不理解该含义的前提下,不要随便复制该配置 -->
  23. <!--<property name="params" value="pageNum=start;pageSize=limit;"/>-->
  24. <!-- 支持通过Mapper接口参数来传递分页参数 -->
  25. <!--<property name="supportMethodsArguments" value="true"/>-->
  26. <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
  27. <!--<property name="returnPageInfo" value="check"/>-->
  28. </plugin>
  29. </plugins>

完整的主配置文件如下:

  1. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  2.  
  3. <configuration>
  4.  
  5. <!--引入数据库信息文件-->
  6. <properties resource="db.properties" />
  7.  
  8. <settings>
  9. <setting name="logImpl" value="STDOUT_LOGGING"/>
  10. </settings>
  11.  
  12. <plugins>
  13. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  14. <!-- 4.0.0以后版本可以不设置该参数 -->
  15. <!--<property name="dialect" value="mysql"/>-->
  16. <!-- 该参数默认为false -->
  17. <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
  18. <!-- 和startPage中的pageNum效果一样-->
  19. <property name="offsetAsPageNum" value="true"/>
  20. <!-- 该参数默认为false -->
  21. <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
  22. <property name="rowBoundsWithCount" value="true"/>
  23. <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
  24. <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
  25. <property name="pageSizeZero" value="true"/>
  26. <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
  27. <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
  28. <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
  29. <property name="reasonable" value="true"/>
  30. <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
  31. <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
  32. <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
  33. <!-- 不理解该含义的前提下,不要随便复制该配置 -->
  34. <!--<property name="params" value="pageNum=start;pageSize=limit;"/>-->
  35. <!-- 支持通过Mapper接口参数来传递分页参数 -->
  36. <!--<property name="supportMethodsArguments" value="true"/>-->
  37. <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
  38. <!--<property name="returnPageInfo" value="check"/>-->
  39. </plugin>
  40. </plugins>
  41.  
  42. <environments default="environment">
  43. <environment id="environment">
  44. <transactionManager type="JDBC" />
  45. <dataSource type="POOLED">
  46. <property name="driver" value="${driverClassName}" />
  47. <property name="url" value="${url}"/>
  48. <property name="username" value="${username}" />
  49. <property name="password" value="${password}" />
  50. </dataSource>
  51. </environment>
  52. </environments>
  53. <!-- 加载SQL定义文件 -->
  54. <mappers>
  55. <mapper resource="cn/test/sql/DeptMapper.xml" />
  56. </mappers>
  57.  
  58. </configuration>

sqlmap-config.xml

然后通过如下的查询语句:

  1. SqlSession session = MyBatisUtil.getSession();
  2. Page<Object> page PageHelper.startPage(2, 4);
  3. //获得总记录数:
  4. //long all=page.getTotal();
  5.  
  6. DeptMapper deptDao=session.getMapper(DeptMapper.class);
  7.  
  8. //查询所有信息
  9. List<Dept> list=deptDao.findAll();
  10. for(Dept dept:list){
  11. System.out.println(dept);
  12. }

然后看一看日志截图:

【MyBatis】MyBatis之分页的更多相关文章

  1. Mybatis Generator实现分页功能

    Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众 ...

  2. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  3. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页

    SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页 **SpringBoot+Mybatis使用Pagehelper分页插件自动分页,非常好用,不用在自己去计算和组装了. ...

  4. SpringBoot+Mybatis+PageHelper实现分页

    SpringBoot+Mybatis+PageHelper实现分页 mybatis自己没有分页功能,我们可以通过PageHelper工具来实现分页,非常简单方便 第一步:添加依赖 <depend ...

  5. SpringBoot集成Mybatis并具有分页功能PageHelper

    SpringBoot集成Mybatis并具有分页功能PageHelper   环境:IDEA编译工具   第一步:生成测试的数据库表和数据   SET FOREIGN_KEY_CHECKS=0;   ...

  6. Mybatis的PageHelper分页插件的PageInfo的属性参数,成员变量的解释,以及页面模板

    作者:个人微信公众号:程序猿的月光宝盒 //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int si ...

  7. 小白的springboot之路(十五)、mybatis的PageHelper分页插件使用

    0.前言 用mybatis,那么分页必不可少,基本都是用PageHelper这个分页插件,好用方便: 1.实现 1.1.添加依赖: <!-- 3.集成 mybatis pagehelper--& ...

  8. Mybatis: 插件及分页

    Mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的). Mybatis支持对Executor.StatementHa ...

  9. 如何用Mybatis逆向工程实现分页查询(更改生成的Example)

    如何用Mybatis逆向工程实现分页查询  一个很简单的方法,如果要mysql实现分页查询的话,执行下述语句即可 select * from table limit (offset)5,(limit) ...

  10. mybatis是如何分页的,分页插件的原理是什么

    mybatis是如何分页的,分页插件的原理是什么 代码之尖关注 12018.12.28 17:11:12字数 529阅读 19,877 1. SQL 分页 <select id="qu ...

随机推荐

  1. 如何对 GIT 分支进行规划?

    项目背景: 该项目是在2011年11月份使用Asp.net三层帮荷兰某个客户开发的机票预定系统 该客户主要是做中国与欧洲的旅行社业务,特别是最近两年由于中国的发展因此客户也越来越重视机票业务 于是他们 ...

  2. 转: 使用MinGW + Eclipse CDT进行C++开发的配置方法

    使用MinGW + Eclipse CDT进行C++开发的配置方法 1 2 3 4 5 6 分步阅读 Eclipse作为开源的IDE,可以用来高效开发Java.C++.C等程序.本文介绍如何在Wind ...

  3. Web.config的Release版本和Debug版本不一样的奥秘

      VS编译完后,release版本的web.config(或者app.config) 为什么不一样那? 我们查看一下项目结构,会发现有两个版本的config文件存在: 打开web.Debug.con ...

  4. Solr搭建真实项目

    在经过solr5.4.1 quick start  的学习后.我们要搭建真实的项目了 1.启动项目 bin/solr start 2.创建core bin/solr create -c pms 3.为 ...

  5. 【Python】torrentParser1.04 增加获得磁力链URI功能

    代码: #------------------------------------------------------------------------------------ # torrentP ...

  6. Android 演示 Android ListView 和 github XListView(3-3)

    本文内容 环境 项目结构 演示 1:简单 XListView 演示 2:XListView + Fragment 演示 3:XListView + ViewPager + Fragment 本文三个演 ...

  7. Java开发 - 异常 - 抛出异常

    问题: 如何抛出一个系统异常并且捕获它 代码如下: public class ThrowDemo { static void demoproc() { try { throw new NullPoin ...

  8. Ubuntu 12.04.1 mysql从5.5升级到5.6

    Ubuntu 12.04.1 mysql从5.5升级到5.6 1 2 3 4 5 apt-cache search mysql-server sudo  apt-add-repository ppa: ...

  9. J4架构应用过程中出现的问题与解决摘录

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6369346.html sendRedirect()的页面不能用EL表达式获取参数:因为是新的request.E ...

  10. unique-paths I &II 路径数,动态规划

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...