PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工.

设置

现在使用的是PageHelper 5.0 版本 :

build.gradle先引用jar包:

// https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper
compile group: 'com.github.pagehelper', name: 'pagehelper', version: '5.0.0'

然后在mybatis的config文件中增加配置项, 我的config文件是 mybatis_general_config.xml:

注意里面的顺序非常重要一定要放在正确的位置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引用db.properties配置文件 -->
<!--<properties resource="config/mybatis/jdbc-mysql.properties"/>-->
<properties resource="config/mybatis/jdbc-mssql.properties"/> <plugins>
<!-- PageHelper4.1.1 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="sqlserver"/>
<property name="offsetAsPageNum" value="false"/>
<property name="rowBoundsWithCount" value="false"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="false"/>
<property name="supportMethodsArguments" value="true"/>
<property name="returnPageInfo" value="none"/>
</plugin>
</plugins> <!--
development : 开发模式
work : 工作模式
-->
<environments default="mssql_dev">
<!--<environment id="development">-->
<!--<transactionManager type="JDBC"/>-->
<!--&lt;!&ndash; 配置数据库连接信息 &ndash;&gt;-->
<!--<dataSource type="POOLED">-->
<!--<property name="driver" value="${jdbc.driverClassName}"/>-->
<!--<property name="url" value="${jdbc.url}"/>-->
<!--<property name="username" value="${jdbc.user}"/>-->
<!--<property name="password" value="${jdbc.pass}"/>-->
<!--</dataSource>-->
<!--</environment>-->
<environment id="mssql_dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <mappers>
<!--&lt;!&ndash; 注册userMapper.xml文件,-->
<!--userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml&ndash;&gt;-->
<!--<mapper resource="resources/mapper/studentMapper.xml"/>-->
<!--<mapper class="lyb.anno_mapper.StudentMapper"/>-->
<!--<mapper class="lyb.mapper.StudentMapper"/>-->
<!--<mapper resource="resources/mapper/classesMapper.xml"/>-->
<!--<mapper resource="mybatis_mapper/StudentMapper.xml"/>-->
<!--<mapper resource="mybatis_mapper/PosInReportMapper.xml"/>-->
<mapper class="lyb.mapper.PosInReportMapper"/>
<mapper class="lyb.mapper.SalesOutReportMapper"/>
<mapper class="lyb.mapper.TransVouchMapper"/>
<mapper class="lyb.mapper.CurrentStockMapper"/>
<mapper class="lyb.mapper.Wcc_User_Customer_ConnMapper"/>
</mappers> </configuration>

**这里有个坑 : **

 <plugin interceptor="com.github.pagehelper.PageInterceptor">

这里的4.X版本的interceptor是PageHelper, 但是5.0版本后改成了PageInterceptor

如果设置的不对会报错.

有关具体设置详见:

https://pagehelper.github.io/docs/howtouse/

<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>

如果顺序放置的不对, 也会出现不能初始化sqlSessionFactory的错误

代码里的使用方法 :

直接加上一个PageHelper的静态方法

PageHelper.startPage(2,10);
List<CurrentStockReport> reportList = mapper.getReport(params.getCustomer_code(),
params.getRegion_name(),
params.getInv_class_code(),
params.getInvcode(),
params.getBarcode());

仅有PageHelper.startPage(int pageNum, int pageSize) 后面的一个查询是会分页的, 我在这里使用的对应的mapper中的查询语句是:

SELECT
CurrentStock.AutoID,
Customer.cCusName,
DistrictClass.cDCName,
Customer.cCusCode,
CurrentStock.cWhCode,
CurrentStock.iQuantity as stock,
CurrentStock.cBatch,
Inventory.cInvStd,
Inventory.cInvName,
Inventory.cInvAddCode
FROM CurrentStock
INNER JOIN Customer ON SUBSTRING(CurrentStock.cWhCode, 1, 6) = Customer.cCusCode
INNER JOIN DistrictClass ON customer.cdccode = DistrictClass.cdccode
INNER JOIN Inventory ON Inventory.cInvCode = CurrentStock.cInvCode;

而由plugin产生的sql语句是 :

SELECT TOP 10
cCusName,
AutoID,
cDCName,
cWhCode,
stock,
cBatch,
cInvStd,
cInvName,
cInvAddCode
FROM (SELECT
ROW_NUMBER()
OVER (
ORDER BY RAND() ) PAGE_ROW_NUMBER,
cCusName,
AutoID,
cDCName,
cWhCode,
stock,
cBatch,
cInvStd,
cInvName,
cInvAddCode
FROM (SELECT
Customer.cCusName,
CurrentStock.AutoID,
DistrictClass.cDCName,
CurrentStock.cWhCode,
CurrentStock.iQuantity AS stock,
CurrentStock.cBatch,
Inventory.cInvStd,
Inventory.cInvName,
Inventory.cInvAddCode
FROM CurrentStock
LEFT OUTER JOIN Customer ON SUBSTRING(CurrentStock.cWhCode, 1, 6) = Customer.cCusCode
LEFT OUTER JOIN DistrictClass ON customer.cdccode = DistrictClass.cdccode
LEFT OUTER JOIN Inventory ON Inventory.cInvCode = CurrentStock.cInvCode
WHERE (Customer.cCusCode = '100001')) AS PAGE_TABLE_ALIAS) AS PAGE_TABLE_ALIAS
WHERE PAGE_ROW_NUMBER > 10
ORDER BY PAGE_ROW_NUMBER

这里可以看出, 本质上对于我们自己的sql插件做的事就是在外面套了一层select, 其中增加了一个column作为排序的依据.

关键在于这一句:

ROW_NUMBER() OVER (ORDER BY RAND())

ROW_NUMBER() 函数就是根据OVER之中的条件, 不断给出一个从1开始自增1的序列, 如果条件正确就一直生成.

这里通过RAND() 生成随机数, 来进行生成ROW_NUMBER(), 然后再在外面套一层SELECT作为选择分页的条件, 如PAGE_ROW_NUMBER > x 就是根据从某一页开始取, TOP y就是取多少个. 这些都是根据刚才的调用 **PageHelper.startPage(int pageNum, int pageSize) ** 计算得到的.

所以可以对任意的sql语句来进行构建分页, 以后可以看下这个插件源码.

Spring Mybatis PageHelper 设置使用的更多相关文章

  1. spring + Mybatis + pageHelper + druid 整合源码分享

    springMvc + spring + Mybatis + pageHelper + druid 整合 spring 和druid整合,spring 整合druid spring 和Mybatis  ...

  2. Spring+mybatis+PageHelper

    为了更简单的实现数据库分页,我们不探讨自己手动修改sql语句分页,这里关于PageHelper自己配置是出现的问题进行记录下: 我采用的是Maven代码托管,在pom.xml进行如下配置: <! ...

  3. 关于Spring+mybatis+PageHelper分页插件PageHelper的使用策略

    把插件jar包导入项目(具体上篇有介绍http://blog.csdn.net/qq_33624284/article/details/72821811) spring-mybatis.xml文件中配 ...

  4. Spring Boot+Mybatis+Pagehelper分页

    Spring Boot 集成MyBatis和Pagehelper分页插件 mybatis-spring-boot-starter依赖树如下: pom配置 <project xmlns=" ...

  5. Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文实现了一个后台由Spring+Mybatis+SpringMVC组成,分页采用Pag ...

  6. MyBatis+PageHelper实现分页

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7256105.html 前面讲到Spring+SpringMVC+MyBatis深入学习及搭建(十七)--Sp ...

  7. Spring+MyBatis整合过程

    步骤: 1.引入Spring+MyBatis开发包 >spring(ioc aop dao)开发包 >mybatis开发包,dbcp,驱动包 >mybatis-spring.jar整 ...

  8. SpringMVC+Spring+MyBatis 整合与图片上传简单示例

    一.思路: (一) Dao层: 1. SqlMapConfig.xml,空文件即可.需要文件头.2. applicationContext_dao.xml. a) 数据库连接池b) SqlSessio ...

  9. Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文实现了一个后台由Spring+Mybatis+SpringMVC组成,分页采用Pag ...

随机推荐

  1. 利用 druid 的 sql parser 模块解析 sql 语句

    druid 是阿里开源在 github 上面的数据库连接池,里面有一个专门解析 sql 语句的模块   源码位置: https://github.com/alibaba/druid SQL Parse ...

  2. Linear Algebra - Determinant(基础)

    1. 行列式的定义 一阶行列式: \[ \begin{vmatrix} a_1 \end{vmatrix} = a_1 \] 二阶行列式: \[ \begin{vmatrix} a_{11} & ...

  3. SqlServer2012——多表连接查询

    1.基本连接 select A.姓名,A.性别,B.班级名,B.家庭住址 From 学生信息 A,班级信息 B where A.所属班级=B.班级编号 --把A表与B表连接起来 2.内连接 --内连接 ...

  4. PHP之递归函数

    https://www.cnsecer.com/4146.html http://www.jb51.net/article/71424.htm //一列数字的规则如下:1,1,2,3,5,8,13,2 ...

  5. Solr6.7 学习笔记(01) -- 目录结构

    Solr解压后的目录结构 --contrib: Solr的一些扩展 --analysis-extras: 包含一些文本分析组件及其依赖 --clustering: 包含一个用于集群搜索结果的引擎 -- ...

  6. Codevs 1688 求逆序对(权值线段树)

    1688 求逆序对  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 给定一个序列a1,a2,…, ...

  7. 洛谷P3200 [HNOI2009]有趣的数列(Catalan数)

    P3200 [HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足 ...

  8. LibreOJ #2036. 「SHOI2015」自动刷题机

    #2036. 「SHOI2015」自动刷题机 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开 ...

  9. 图论2 最近公共祖先LCA

    模板 吸取洛谷P3379的教训,我决定换板子(其实本质都是倍增是一样的),把vector换成了边表 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下 ...

  10. Nginx在Linux里安装 以及nginx实现负载均衡

    Nginx 一.在Linux里安装软件 1. rpm命令 rpm: redhat package manager,红帽软件包管理套件 常用命令: 安装:rpm -ivh 软件包 i :安装模式 v : ...