1. 程式人生 > 程式設計 >Mybatis Plus 自定義方法實現分頁功能的示例程式碼

Mybatis Plus 自定義方法實現分頁功能的示例程式碼

一般物理分頁,即通過sql語句分頁,都是在sql語句後面新增limit分頁語句,在xml檔案裡傳入分頁的引數,再多配置一條sql,用於查詢總數:

<select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper">    
     select * from student limit #{currIndex},#{pageSize}   
   </select>
   <select id="queryStudentsCount" resultType="java.lang.Integer" parameterType="java.util.Map">    
    select count(*) from student   
   </select>

這樣可以實現分頁,但是每條sql都這樣寫,很冗餘,而且不好維護,所以高階一點的方式就是自定義的一個攔截器,攔截所有需要分頁的查詢語句,並且利用獲取到的分頁相關引數統一在sql語句後面加上limit分頁的相關語句,一勞永逸,不需要再每條語句都配置一下,攔截器具體怎麼實現不說了,因為Mybatis Plus已經有類似這樣一個攔截器的分頁外掛,利用這個分頁外掛,不需要自己寫攔截器就可以輕鬆實現分頁查詢:

Mybatis-Plus(簡稱MP)是一個Mybatis的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

1、 新增Mybatis-plus

<dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>2.1.8</version>
    </dependency>

2、配置攔截器

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;
  /**   
  * mybatis-plus配置   
  *   
  */  
  @Configuration  
  public class MybatisPlusConfig {
    /**     
    * 分頁外掛     
    */    
    @Bean    
    public PaginationInterceptor paginationInterceptor() {       
      PaginationInterceptor page = new PaginationInterceptor();       
      page.setDialectType("mysql");       
      return page;    
    }  
  }

3、service實現

傳統的查詢方式:

 SELECT *
  FROM sys_user
  WHERE (name='張三' AND sex=0 AND age BETWEEN '18' AND '50')
  LIMIT 0,10

利用 Mybtis-plus,可以輕鬆實現分頁查詢

// 分頁查詢 10 條姓名為‘張三'、性別為男,且年齡在18至50之間的使用者記錄  
 List<User> userList = userMapper.selectPage(
    new Page<User>(1,10),new EntityWrapper<User>().eq("name","張三")
        .eq("sex",0)
        .between("age","18","50")
 )

以上是單表查詢的分頁實現,多表查詢,或者比較複雜的查詢語句也可以輕鬆實現:

 public Page<User> selectUserPage(Page<User> page,Integer state) {
    // 不進行 count sql 優化,解決 MP 無法自動優化 SQL 問題
    // page.setOptimizeCountSql(false);
    // 不查詢總記錄數
    // page.setSearchCount(false);
    // 注意!! 分頁 total 是經過外掛自動 回寫 到傳入 page 物件
    return page.setRecords(userMapper.selectUserList(page,state));
  }

注意:需要根據前端傳來的分頁引數,當前第幾頁,每頁多少條,構造一個page 物件,初始化這些引數,將page物件傳遞給mapper,攔截器會自動在sql語句加上limit查詢,自動查詢總記錄數並寫回page物件。

4 mapper 介面以及 xml

 public interface UserMapper{//可以繼承或者不繼承BaseMapper
  /**
   * <p>
   * 查詢 : 根據state狀態查詢使用者列表,分頁顯示
   * </p>
   *
   * @param page
   *      翻頁物件,可以作為 xml 引數直接使用,傳遞引數 Page 即自動分頁
   * @param state
   *      狀態
   * @return
   */
  List<User> selectUserList(Pagination page,Integer state);
}

UserMapper.xml 等同於編寫一個普通 list 查詢,mybatis-plus 自動替你分頁

 <select id="selectUserList" resultType="User">
    SELECT * FROM user WHERE state=#{state}
  </select>

注意:一定要傳遞page引數,否則不能實現分頁,查詢sql 可以是多表聯合查詢的複雜語句。

總結

到此這篇關於Mybatis Plus 自定義方法實現分頁功能的示例程式碼的文章就介紹到這了,更多相關Mybatis Plus 自定義分頁內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!