Spring整合Mybatis 之分頁插件使用


【分頁插件項目中的正式代碼一共有個5個Java文件,這5個文件的說明如下】

  • Page<E>[必須]:分頁參數類,該類繼承ArrayList,雖然分頁查詢返回的結果實際類型是Page<E>,但是可以完全不出現所有的代碼中,可以直接當成List使用。返回值不建議使用Page,建議仍然用List。如果需要用到分頁信息,使用下面的PageInfo類對List進行包裝即可。
  • PageHelper[必須]:分頁插件攔截器類,對Mybatis的攔截在這個類中實現。
  • PageInfo[可選]:Page<E>的包裝類,包含了全面的分頁屬性信息。
  • SqlParser[可選]:提供高效的count查詢sql。主要是智能替換原sql語句為count(*),去除不帶參數的order by語句。需要jsqlparser-0.9.1.jar支持。
  • SqlUtil[必須]:分頁插件工具類,分頁插件邏輯類,分頁插件的主要實現方法都在這個類中。

使用步驟(基於maven):
 
1、添加maven依賴
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.1</version>
</dependency>
 
2、配置PageHelper攔截器插件(2種方法)
 
方法一:
a : 在mybatis-config.xml中配置插件 
<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>

b:在applicationContext-mybatis.xml中引入mybatis文件

<!-- 配置sqlSessionFactory整合MyBatis的Bean組件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    <property name="typeAliasesPackage" value="com.del.pojo"></property>  
</bean>

 

方法二:在applicationContext-mybatis.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>
 
3、在代碼中使用PageHelper分頁
 
controller層使用:
         /*
         * 展示用戶列表管理
         */
        @RequestMapping(value="/user")
        public String doUserList(@RequestParam(value="currentPage")String currentPage,Model model){
             
              if(Integer.parseInt(currentPage)==1){
                       PageHelper.startPage(1,7);
               }
               PageHelper.startPage(Integer.parseInt(currentPage),7);
               List<User> userlist = userService.findUserList();
               PageInfo<User> info = new PageInfo<User>(userlist);
              
               /*System.out.println("totol======="+info.getTotal());
               System.out.println("EndRow======="+info.getEndRow());
               System.out.println("FirstPage======="+info.getFirstPage());
               System.out.println("LastPage======="+info.getLastPage());
               System.out.println("NavigatePages======="+info.getNavigatePages());
               System.out.println("NavigatepageNums======="+info.getNavigatepageNums());
               System.out.println("PageSize======="+info.getPageSize());
               System.out.println("Size======="+info.getSize());
               System.out.println("PrePage======="+info.getPrePage());
               System.out.println("StartRow======="+info.getStartRow());
               System.out.println("Pages======="+info.getPages());
               System.out.println("OrderBy======="+info.getOrderBy());
               System.out.println("NextPage======="+info.getNextPage());
               System.out.println("List======="+info.getList());
               System.out.println("LastPage======="+info.getLastPage());
               System.out.println("FirstPage======="+info.getFirstPage());
               System.out.println("isIsFirstPage()======="+info.isIsFirstPage());
               System.out.println("isHasNextPage()======="+info.isHasNextPage());
               System.out.println("isHasPreviousPage()======="+info.isHasPreviousPage());
               System.out.println("PageNum()======="+info.getPageNum());*/
             
               //PageInfo<T> pageInfo = new PageInfo(userlist);
               //mView.addObject("userlist", userlist);
               //mView.setViewName("manager/user");
               model.addAttribute("userlist", userlist);
               model.addAttribute("page", info);
               return "manager/user.jsp";
        }

Jsp頁面:

      

 

[重要說明] 
1:只有緊跟在PageHelper.startPage方法后的第一個Mybatis的查詢(Select方法)方法會被分頁。
2:帶有for update的sql,會拋出運行時異常,這樣的sql建議手動分頁,畢竟這樣的sql需要重視。
3:不支持關聯結果查詢,但是支持關聯嵌套查詢。只會對主sql進行分頁,嵌套的sql不會被分頁。


免責聲明!

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



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