天天看點

mybatis實作分頁的三種方法

1. SQL分頁

  1. size的含義:需要展示的頁面資訊數目。
  2. index的含義:從哪個位置起,SQL中的下标是從0開始的,如果寫的是0 , 5那麼隻有最前面的【0、1、2、3、4】五條資訊。
  3. index的可選性:這個參數是一個可有可無的,如果不寫index實際是index = 0,即limit 6 預設被轉化為 limit 0 ,6。
  4. size的bug:如果想加載所有的資料可以将size 置為 -1(這種用法被認為是MySQL的bug已經被修複),現在MySQL給的解決方案是寫一個超大的正數即可全部加載。

2. 最原生的limit語句

與傳統的JDBC分頁實作一樣,在編寫的SQL語句執行的時候動态傳入兩個變量,一個是起始位置,另外一個是數目。resultType = "map"在程式中定義個hashmap加入這兩個參數讓xml配置檔案對這兩個資料進行加載即可。

接口UserMapper.java

import java.util.List;
import java.util.Map;
public interface UserMapper {
    List<User> getUserListByLimit(Map<String, Integer> map);
}
           

UserMapper.xml映射檔案

<select id="getUserListByLimit" parameterType="map" resultType="user">
	select *from user limit #{startIndex}, #{countSize}
</select>
           

測試方法

@Test
public void LimitPage(){
    SqlSession session = mybatisUtil.getSqlsession();
    HashMap<String,Integer> map = new HashMap<>();
    map.put("startIndex", 0);            //起始下标
    map.put("countSize",5);              //加載數目
    UserMapper mapper = session.getMapper(UserMapper.class);
    List<User> list = mapper.getUserListByLimit(map);
    for(User user : list){
        System.out.println(user.toString());
    }
    session.close();
}
           
mybatis實作分頁的三種方法

2. 使用RowBounds對象

相對于原生SQL語句來說,無非就是傳兩個參數一個起始位置index,一個是數目size。現在直接使用RowBounds封裝這兩個參數傳給xml配置檔案。

  1. mybatis官方提供的SQL執行分為很多種,現在官分推薦使用的是getMapper反射加載一個類,然後執行這個方法。
  2. mybatis官分為CRUD都分别設定了單獨的方法,在使用RowBounds時必須使用這些量身定制化的CRUD方法。

接口UserMapper.java

import java.util.List;
import java.util.Map;
public interface UserMapper {
    List<User> getUserListByRowBounds();
}
           

UserMapper.xml映射檔案

<select id="getUserListByRowBounds" resultType="user">
    select *from user
</select>
           

測試方法

@Test
public void RowBoundsPage(){
    SqlSession session = mybatisUtil.getSqlsession();
    RowBounds bounds = new RowBounds(2,3);
    /* 
    	使用mybatis對crud分别量身定制化的方法。
    	1. 第一個參數是綁定的接口中的方法名
      	2. 第二個是方法所需的參數(這裡沒有參數傳入)
      	3. 第三個參數就是RowBounds對象
    */
    List<User> list = session.selectList("com.ljq.dao.UserMapper.getUserListByRowBounds", null, bounds);
    for(User user : list){
        System.out.println(user.toString());
    }
    session.close();
}
           
mybatis實作分頁的三種方法

4. 使用PageHelper插件

無論最後mybatis給項目開發帶來了多大的便利,最後它的底層實作一定還是Java語言 + 最原始的SQL語句。語言才是程式員的家,合理使用架構。

繼續閱讀