下面小寶鴿將分享一篇Mybatis分頁功能的博文,下面將給出詳細的步驟,跟著博主的節奏肯定能實現。另外最后還會附上整個工程的源碼。如果是沒有使用過maven的猿友可自行下載相關的jar包即可。
### 一、項目搭建
關于項目搭建,小寶鴿以前寫過一篇[Spirng+SpringMVC+Maven+Mybatis+MySQL項目搭建](http://blog.csdn.net/u013142781/article/details/50380920),這篇文章提供了詳細的搭建過程,而且提供了源碼下載,接下來的將在這個源碼的基礎上繼續開發。所以建議各位猿友可以把猿友下載一下。
### 二、分頁插件的介紹
博主采用的插件是PageHelper這個插件,使用起來十分方便。該插件支持以下數據庫:
~~~
Oracle
Mysql
MariaDB
SQLite
Hsqldb
PostgreSQL
DB2
SqlServer(2005+)
Informix
H2
~~~
對應于github的項目地址:
[https://github.com/pagehelper/Mybatis-PageHelper](https://github.com/pagehelper/Mybatis-PageHelper)。
關于使用建議猿友們可以詳細閱讀下這里的介紹:
[http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/HowToUse.markdown](http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/HowToUse.markdown)
讀一遍之后可能還不能完全懂怎么使用,可以先看完博主的這篇文章,然后慢慢再消化,但是上面的那篇文章還是需要從頭到尾看一遍。
### 三、PageHelper的使用
在”一、項目搭建“里下載好了源碼,下載的源碼導入eclipse后的結構里面,有如下的文件:


接下來我們并不需要新增文件,直接在這些文件上修改就好了。
**3.1、引入依賴**
在pom.xml文件添加如下依賴:
~~~
<!-- mybatis分頁插件依賴 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.0.0</version>
</dependency>
~~~
**3.2、在Mybatis配置xml中配置攔截器插件**
在mybatis-config.xml文件中添加插件后的內容如下:
~~~
<?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>
<!-- 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="false"/>
<!-- 3.5.0版本可用 - 為了支持startPage(Object params)方法 -->
<!-- 增加了一個`params`參數來配置參數映射,用于從Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認值 -->
<!-- 不理解該含義的前提下,不要隨便復制該配置 -->
<property name="params" value="pageNum=start;pageSize=limit;"/>
<!-- always總是返回PageInfo類型,check檢查返回類型是否為PageInfo,none返回Page -->
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
</configuration>
~~~
**3.3、mapper文件添加sql**
在userMapper.xml文件里面添加sql:
~~~
<!-- 根據用戶名查詢 -->
<select id="selectUserByUserName" parameterType="java.lang.String" resultMap="BaseResultMap">
SELECT *
FROM t_user
WHERE 1 = 1
<if test="userName != null and userName !=''">
AND USER_NAME = #{userName,jdbcType=VARCHAR}
</if>
ORDER BY USER_ID
</select>
~~~
**3.4、dao添加對用方法**
UserDao.java添加如下方法:
~~~
List<User> selectUserByUserName(@Param("userName") String userName);
~~~
記得@Param必須有
**3.5、service添加分頁查詢方法**
UserService.java文件添加方法
~~~
PageInfo<User> queryByPage(String userName,Integer pageNo,Integer pageSize);
~~~
**3.6、實現類添加對應實現**
UserServiceImpl.java添加實現方法
~~~
@Override
public PageInfo<User> queryByPage(String userName, Integer pageNo,Integer pageSize) {
pageNo = pageNo == null?1:pageNo;
pageSize = pageSize == null?10:pageSize;
PageHelper.startPage(pageNo, pageSize);
List<User> list = userDao.selectUserByUserName(userName);
//用PageInfo對結果進行包裝
PageInfo<User> page = new PageInfo<User>(list);
//測試PageInfo全部屬性
System.out.println(page.getPageNum());
System.out.println(page.getPageSize());
System.out.println(page.getStartRow());
System.out.println(page.getEndRow());
System.out.println(page.getTotal());
System.out.println(page.getPages());
System.out.println(page.getFirstPage());
System.out.println(page.getLastPage());
System.out.println(page.isHasPreviousPage());
System.out.println(page.isHasNextPage());
return page;
}
~~~
**3.7、單元測試類添加分頁查詢測試方法**
UserServiceTest.java文件添加方法:
~~~
@Test
public void queryByPageTest(){
PageInfo<User> page = userService.queryByPage(null, 1, 1);
System.out.println(page);
}
~~~
**3.8、運行**
**在小寶鴿進行了上面的修改之后,第一運行報錯了!!!!最后是pom.xml文件注釋了下面兩個包的依賴才運行成功了,注釋的依賴如下:**

具體原因現在小寶鴿也不知道,應該是包有沖突的原因吧,如果猿友們知道原因麻煩私信我或評論解釋一下。
然后運行單元測試類,結果如下:

**3.9、補充說明**
在3.8中,我注釋了那兩個包依賴是web項目相關的依賴,如果仍需要進行前端開發的猿友可以引入tomcat就好了,引入結果如下:

引入過程:
選中項目右鍵–>build path,然后如下操作:



### 4、源碼下載
[http://download.csdn.net/detail/u013142781/9379685](http://download.csdn.net/detail/u013142781/9379685)
- 前言
- Maven入門(含實例教程)
- Spirng+SpringMVC+Maven+Mybatis+MySQL項目搭建
- Dubbo分布式服務框架入門(附工程)
- mybaits入門(含實例教程和源碼)
- Zookeeper注冊中心的搭建
- Maven+Mybatis+Spring+SpringMVC實現分頁查詢(附源碼)
- Spring中@Transactional事務回滾(含實例詳細講解,附源碼)
- RabbitMQ消息隊列入門篇(環境配置+Java實例+基礎概念)
- Spring+EhCache緩存實例(詳細講解+源碼下載)
- Redis+Spring緩存實例(windows環境,附實例源碼及詳解)
- VMware Ubuntu安裝詳細過程
- VMware Tools (ubuntu系統)安裝詳細過程與使用
- 程序員一年工作經驗之談
- Shiro安全框架入門篇(登錄驗證實例詳解與源碼)
- Spring Security安全框架入門篇