原理:mysql
mybatis執行sql步驟: git
經過sqlsessionFactory sqlsession Exector (執行器對象)mappedstatement(sql語句封裝)github
在執行mappedstatement前在sql語句上加上limit便可實現分頁spring
步驟:sql
1、引入pageHelper的jar包session
2、在mybatis的xml文件中配置分頁插件mybatis
<!-- 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使用完整的類路徑。oracle
其餘五個參數說明:app
也能夠在spring的xml文件中配置ide
<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>
3、配置完成後再調用類中配置分頁屬性:
步驟: 只需將查詢的條件放入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方法後的一個個查詢方法纔會被分頁。