Mybatis的分頁外掛PageHelper使用及注意事項
阿新 • • 發佈:2018-12-23
(一)PageHelper分頁外掛介紹
*筆者採用spring+springMVC+mybatis框架做java後臺開發,開發軟體是IntellijIDEA(用過之後已卸掉eclipse),專案為maven工程。
使用方法
(在已有ssm框架基礎上)
1.mybatis的配置檔案中新增程式碼:
<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"/>
</plugin>
</plugins>
2.maven工程新增dependency自動下載jar包,將以下程式碼新增到pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version >4.0.0</version>
</dependency>
3.配置完成,等下完jar包就可以用了。。哈哈哈哈哈哈
3.1 controller
@ResponseBody
@RequestMapping(value = "selectPositionWithCondition.do")
public AjaxResultPo deleteDepart(PositionManagerPO positionManagerPO){
PageInfo<PositionManagerVO> pageInfo = positionService.getMessagesByCondition(positionManagerPO);
return new AjaxResultPo(true,pageInfo);
}
*需要引 import com.github.pagehelper.PageInfo;
這裡的重點就是controller呼叫service實現類的getMessagesByCondition方法,返回一個以PageInfo包裝的一個list,(實際從資料庫中查出的是list<>)
3.2 Service實現類
@Autowired
private PositionManagerMapper mapper;
public PageInfo<PositionManagerVO> getMessagesByCondition(PositionManagerPO positionManagerPO) {
PageHelper.startPage(1,10);//這句是重點,利用分頁外掛將接下來的一條查詢的sql限定在第一頁,查10條資料
List<PositionManagerVO> list = mapper.selectPosition1(positionManagerPO);//呼叫mapper層執行查詢
PageInfo<PositionManagerVO> page = new PageInfo<PositionManagerVO>(list);//包裝到PageInfo,傳給controller
//測試PageInfo全部屬性,PageInfo的強大之處,它攜帶以下資訊
System.out.println("PageNum: "+page.getPageNum()); //2 第幾頁
System.out.println("PageSize: "+page.getPageSize()); //3 每頁包含的條數
System.out.println("StartRow: "+page.getStartRow()); //4 顯示的頁面的第一條的
System.out.println("EndRow: "+page.getEndRow()); //6 顯示的頁面的最後一條的
System.out.println("Total: "+page.getTotal()); //8 總記錄數
System.out.println("Pages: "+page.getPages()); //3 總頁數
System.out.println("FirstPage: "+page.getFirstPage()); //1 第一頁
System.out.println("LastPage: "+page.getLastPage()); //3 最後一頁
System.out.println("isHasPreviousPage: "+page.isHasPreviousPage());
System.out.println("isHasNextPage: "+page.isHasNextPage());
return page;
}
3.3 mapper
@Component
public interface PositionManagerMapper {
public List<PositionManagerVO> selectPosition1(PositionManagerPO positionManagerPO);
}
mapper中什麼都沒有。。。
3.4 mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.channelsoft.dao.PositionManagerMapper">
<select id="selectPosition1" resultType="java.util.ArrayList" parameterType="com.channelsoft.model.PositionManagerPO" resultMap="PositionResultMap">
select * from t_position_manager
</select>
</mapper>
同樣簡單粗暴的查詢
接下來是本文的重點。。
(二)注意事項
1. pageHelper只支援使用後的下一條查詢語句,而且是用limit ?,? 實現的
2.pageHelper與註解形式的@SelectProvider不相容,需使用xml檔案寫動態sql語句
3.maven工程預設不編譯.xml檔案,在工程的target資料夾下看不到對應的.xml,需要在pom.xml的build標籤裡新增以下內容:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>