Mybatis 分頁查詢簡單實現方式(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
    /**
     * 查詢 : 根據state狀態查詢用戶列表,分頁顯示
     * @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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章