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

一、引入jar包

這裏以maven爲例(若是下載jar,還須要下載pageHelper的依賴com.github.jsqlparser):java

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

二、添加配置

在mybatis的全局配置文件裏<configuration>標籤下添加下面的配置mysql

<!-- 
    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>

三、編寫代碼

下面是Junit單元測試的簡單實現分頁查詢的代碼git

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實現。github

注意:分頁插件對逆向工程生成的代碼支持很差(3.4.2版本),不能對有查詢條件的查詢分頁,會拋異常。spring

      可是後來使用4.1.6能夠支持逆向工程。sql

官方文檔:包含更多配置以及注意事數據庫

相關文章
相關標籤/搜索