Mybatis+SpringMVC實現分頁查詢(附源碼)


Maven+Mybatis+Spring+SpringMVC實現分頁查詢(附源碼)

一、項目搭建

關於項目搭建,小寶鴿以前寫過一篇Spirng+SpringMVC+Maven+Mybatis+MySQL項目搭建,這篇文章提供了詳細的搭建過程,而且提供了源碼下載,接下來的將在這個源碼的基礎上繼續開發。所以建議各位猿友可以把猿友下載一下。

二、分頁插件的介紹

博主采用的插件是PageHelper這個插件,使用起來十分方便。該插件支持以下數據庫:

Oracle
Mysql
MariaDB
SQLite
Hsqldb
PostgreSQL
DB2
SqlServer(2005+)
Informix
H2

對應於github的項目地址:
https://github.com/pagehelper/Mybatis-PageHelper
關於使用建議猿友們可以詳細閱讀下這里的介紹:
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://blog.csdn.net//u013142781/article/details/50410243


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM