PageHelper--Mybatis分頁外掛(ssm框架下的使用)
1.匯入PageHelper依賴
<!-- MyBatis 分頁外掛 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.0.0</version> </dependency>
2.配置PageHelper外掛
注意:om.github.pagehelper.PageHelper這個介面,自4.0.0版本以後就不再使用了,轉而實現這個介面:org.apache.ibatis.plugin.Interceptor。由於我使用的是4.0.0版本,所以還是用的PageHelper。
方式一:在mybatis的主配置檔案中配置PageHelper外掛
<?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> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql"/> <property name="offsetAsPageNum" value="true"/> <property name="rowBoundsWithCount" value="true"/> <property name="pageSizeZero" value="true"/> <property name="reasonable"value="true"/> <property name="params" value="pageNum=start;pageSize=limit;"/> <property name="supportMethodsArguments" value="true"/> <property name="returnPageInfo" value="check"/> </plugin> </plugins> </configuration>
屬性說明:
dialect(常用):指定當前使用的資料庫 。pagehelper版本4.0.0以後可以不設定此屬性。
offsetAsPageNum:設定為true時,會將RowBounds第一個引數offset當成pageNum頁碼使用,預設為false。
rowBoundsWithCount:設定為true時,使用RowBounds分頁會進行count查詢,預設為false。
pageSizeZero:設定為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是Page型別)。
reasonable(常用):分頁引數合理化,設定為true時,如果pageNum<1會查詢第一頁,如果pageNum>最大頁數時會查詢最後一頁;禁用合理化時,如果pageNum<1或pageNum>最大頁數時會返回空資料。預設為false禁用(3.3.0之後版本可用)。
params:增加了一個`params`引數來配置引數對映,用於從Map或ServletRequest中取值。可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置對映的用預設值。不理解該含義的前提下,不要隨便複製該配置 (3.5.0版本可用,為了支援startPage(Object params)方法)
supportMethodsArguments:支援通過Mapper介面引數來傳遞分頁引數。
returnPageInfo:always總是返回PageInfo型別,check檢查返回型別是否為PageInfo,none返回Page。
記得在spring的配置檔案的sqlSessionFactory中指定mybatis全域性配置檔案位置。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--指定mybatis全域性配置檔案位置--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--指定mapper.xml配置檔案路徑--> <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/> <!--裝配資料來源--> <property name="dataSource" ref="dataSource"/> </bean>
方式二:直接在spring主配置檔案中配置PageHelper外掛(沒有mybatis的主配置檔案使用此方式)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--指定mybatis全域性配置檔案位置--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--指定mapper.xml配置檔案路徑--> <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/> <!--裝配資料來源--> <property name="dataSource" ref="dataSource"/> <!--配置外掛--> <property name="plugins"> <array> <!--配置PageHelper外掛--> <bean class="com.github.pagehelper.PageHelper"> <property name="properties"> <props> <!--配置資料庫方言,告訴 PageHelper當前使用的資料庫--> <prop key="dialect">mysql</prop> <!--配置頁碼的合理化修正,在1~總頁數之間修正頁碼--> <!--合理化修正--> <prop key="reasonable">true</prop> </props> </property> </bean> </array> </property> </bean>
3.使用
在執行查詢之前呼叫PageHelper的靜態方法:PageHelper.startPage(pageNum,pageSize)即可,pagehelper自動對PageHelper.startPage 方法下的第一個sql 查詢進行分頁。
此方法兩個引數:
pageNum:當前頁碼
pageSize:每頁顯示的條數
程式碼舉例:
@Test public void test2(){ PageHelper.startPage(2,10); List<Admin> list = adminMapper.selectAdminByKeyword(""); for (Admin admin : list) { System.out.println(admin); } }
輸出: