文档章节

Mybatis的分页插件PageHelper4.1.6的使用

颖辉小居
 颖辉小居
发布于 2016/09/19 22:11
字数 971
阅读 341
收藏 3

1、引入jar包

这里以maven为例(如果下载jar,还需要下载pageHelper的依赖com.github.jsqlparser):

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.6</version>
</dependency>

2、添加配置

在mybatis的全局配置文件里<configuration>标签下添加下面的配置

<!-- 
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?, 
    typeAliases?, typeHandlers?, 
    objectFactory?,objectWrapperFactory?, 
    plugins?, 
    environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <!-- 4.0.0以后版本可以不设置该参数 -->
        <property name="dialect" value="mysql"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
        <!-- 和startPage中的pageNum效果一样-->
        <property name="offsetAsPageNum" value="true"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
        <property name="rowBoundsWithCount" value="true"/>
        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
        <property name="pageSizeZero" value="true"/>
        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
        <property name="reasonable" value="false"/>
        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
        <!-- 不理解该含义的前提下,不要随便复制该配置 -->
        <property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/>
        <!-- 支持通过Mapper接口参数来传递分页参数 -->
        <property name="supportMethodsArguments" value="false"/>
        <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
        <property name="returnPageInfo" value="none"/>
    </plugin>
</plugins>

3、编写代码

下面是Junit单元测试的简单实现分页查询的代码

package com.taotao.PageHelper;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.mapper.TbItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemExample;
import com.taotao.pojo.TbItemExample.Criteria;

//自动加载spring容器
@RunWith(SpringJUnit4ClassRunner.class)
// 告诉junit spring的配置文件
@ContextConfiguration({ "classpath:spring/applicationContext-dao.xml",
		"classpath:spring/applicationContext-service.xml" })
public class TestPageHelper {
	@Autowired
	private TbItemMapper itemMapper;

	/**
	 * 无条件分页查询测试
	 * 
	 * @Title:函数 TestPageHelper
	 * @Description:Comment for non-overriding methods
	 * @author 张颖辉
	 * @date 2016年9月19日下午9:54:36
	 */
	@Test
	public void TestPageHelper() {
		// 执行查询并分页
		TbItemExample itemExample = new TbItemExample();
		// 分页处理
		PageHelper.startPage(2, 10);// 如果没有这行,后面就会取出所有的商品list
		// 执行查询语句获取商品列表
		List<TbItem> items = itemMapper.selectByExample(itemExample);
		// 打印返回的商品列表
		for (int i = 0; i < items.size(); i++) {
			System.out.println((i + 1) + ":" + items.get(i).getTitle());
		}
		// 获取分页信息
		PageInfo<TbItem> pageInfo = new PageInfo<TbItem>(items);
		long total = pageInfo.getTotal();
		System.out.println("共有商品:" + total);
	}

	@Autowired
	SqlSessionFactoryBean sqlSessionFactory;

	/**
	 * 条件分页查询测试
	 * 
	 * @Title:函数 TestPageHelper2
	 * @Description:Comment for non-overriding methods
	 * @author 张颖辉
	 * @date 2016年9月19日下午9:54:55
	 * @throws Exception
	 */
	@Test
	public void TestPageHelper2() throws Exception {
		/**
		 * 另外一种注入的方式,通过SqlSessionFactoryBean拿到bean(比较落后,已经不常用)
		 */
		// SqlSessionFactory sessionFactory = sqlSessionFactory.getObject();
		// SqlSession sqlSession = sessionFactory.openSession();
		// TbItemMapper itemMapper = sqlSession.getMapper(TbItemMapper.class);

		System.out.println("测试获取数据库会话对象Session:" + sqlSessionFactory.getObject().openSession());

		TbItemExample itemExample = new TbItemExample();
		Criteria criteria = itemExample.createCriteria();
		criteria.andIdLessThan(700000L);
		// criteria.andPriceEqualTo(49800L);

		// 获取第1页,10条内容,默认查询总数count
		PageHelper.startPage(1, 10);

		// 紧跟着的第一个select方法会被分页
		List<TbItem> items = itemMapper.selectByExample(itemExample);

		// 打印返回的商品列表
		for (int i = 0; i < items.size(); i++) {
			System.out.println((i + 1) + ":" + items.get(i).getTitle());
		}
		// 获取分页信息
		PageInfo<TbItem> pageInfo = new PageInfo<TbItem>(items);
		long total = pageInfo.getTotal();
		System.out.println("共有商品:" + total);

	}

}

上面的分页方法支持自定义多表关联查询sql的mapper实现。

注意:分页插件对逆向工程生成的代码支持不好(3.4.2版本),不能对有查询条件的查询分页,会抛异常。

      但是后来使用4.1.6可以支持逆向工程。

官方文档:包含更多配置以及注意事

© 著作权归作者所有

共有 人打赏支持
颖辉小居

颖辉小居

粉丝 35
博文 189
码字总数 80452
作品 0
东城
高级程序员
私信 提问
加载中

评论(1)

i
itxx2016
呵呵,写的很好啊.
推荐一个很不错的mybatis代码生成网站: fwjava.com
很流行的专门网站,很多知名的互联网企业都在用这个网站.
我也用过,绝对的好用.
pagehelper/Mybatis-PageHelper

Mybatis分页插件 - PageHelper 如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示。 想要使用分页...

java梦想家01
2015/08/03
0
0
abel533/Mybatis_PageHelper

MyBatis 分页插件 - PageHelper English 如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示。 ...

abel533
2014/09/02
0
0
cc.z/resultbounds

resultbounds - MyBatis分页插件 该插件的可取之处 以简单的方式提供一个优雅的 MyBatis 物理分页功能,不需要修改代码就可以把默认的分页换成物理分页。目前该插件的实现经过几次重构,可读...

cc.z
2017/05/16
0
0
Mybatis 分页插件 3.7.4 发布

Mybatis分页插件 - PageHelper 如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。 分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示。 想要使用分页...

Liuzh_533
2015/05/26
2.3K
16
Mybatis 分页插件 3.2.0 发布

Mybatis分页插件 - PageHelper说明 V3.2.0: 统一返回值为Page(可以直接按List使用),方便在页面使用EL表达式,如${page.pageNum},${page.total} 解决count sql在oracle中的错误 增加了对H...

Liuzh_533
2014/06/09
5.8K
28

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
47分钟前
3
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
59分钟前
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
59分钟前
3
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
今天
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部