1. SQL分頁
- size的含義:需要展示的頁面資訊數目。
- index的含義:從哪個位置起,SQL中的下标是從0開始的,如果寫的是0 , 5那麼隻有最前面的【0、1、2、3、4】五條資訊。
- index的可選性:這個參數是一個可有可無的,如果不寫index實際是index = 0,即limit 6 預設被轉化為 limit 0 ,6。
- 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();
}
2. 使用RowBounds對象
相對于原生SQL語句來說,無非就是傳兩個參數一個起始位置index,一個是數目size。現在直接使用RowBounds封裝這兩個參數傳給xml配置檔案。
- mybatis官方提供的SQL執行分為很多種,現在官分推薦使用的是getMapper反射加載一個類,然後執行這個方法。
- 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();
}
4. 使用PageHelper插件
無論最後mybatis給項目開發帶來了多大的便利,最後它的底層實作一定還是Java語言 + 最原始的SQL語句。語言才是程式員的家,合理使用架構。