原理:
mybatis執行sql步驟:
通過sqlsessionFactory sqlsession
Exector (執行器對象)
mappedstatement(sql語句封裝)
在執行mappedstatement前在sql語句上加上limit即可實現分頁
步驟:
一、引入pageHelper的jar包
二、在mybatis的xml文件中配置分頁插件
<!-- plugins在配置文件中的位置必須符合要求,否則會報錯,順序如下: properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers? --> <plugins> <!-- com.github.pagehelper為PageHelper類所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <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="true"/> </plugin> </plugins>
這里的com.github.pagehelper.PageHelper使用完整的類路徑。
其他五個參數說明:
- 增加dialect屬性,使用時必須指定該屬性,可選值為oracle,mysql,mariadb,sqlite,hsqldb,postgresql,沒有默認值,必須指定該屬性。
- 增加offsetAsPageNum屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁時,會將offset參數當成pageNum使用,可以用頁碼和頁面大小兩個參數進行分頁。
- 增加rowBoundsWithCount屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁會進行count查詢。
- 增加pageSizeZero屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)。
- 增加reasonable屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。具體作用請看上面配置文件中的注釋內容。
也可以在spring的xml文件中配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations"> <array> <value>classpath:mapper/*.xml</value> </array> </property> <property name="typeAliasesPackage" value="com.isea533.ssm.model"/> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageHelper"> <property name="properties"> <value> dialect=hsqldb reasonable=true </value> </property> </bean> </array> </property> </bean>
三、配置完成后再調用類中配置分頁屬性:
步驟: 只需將查詢的條件放入PageInfo中,設置分頁屬性即可
//查詢所需數據條件 List<TbItem> list = ibItemMapper.selectByExample(new TbItemExample()); //設置分頁信息(第幾頁,每頁數量) PageHelper.startPage(pageNum, pageSize); //取記錄總條數 PageInfo<TbItem> pageInfo = new PageInfo<>(list); long sum = pageInfo.getTotal();
原理: 執行自定義( 例如 :ibItemMapper.selectByExample(new TbItemExample())) 查詢語句時,
會在mappedstatement執行前將分頁的sql語句追加到查詢語句后。
page的一些屬性:
page.getPageNum();
page.getPageSize();
page.getStartRow();
page.getEndRow();
page.getTotal();
page.getPages();
page.getFirstPage();
page.getLastPage();
page.isFirstPage();
page.isLastPage();
page.isHasPreviousPage();
page.isHasNextPage();
注意事項:
-
PageHelper.startPage方法后的一個個查詢方法才會被分頁。
- 不支持帶有for update的語句分頁。
- 不支持關聯結果查詢。