更新時間:2021-06-21 12:29:04 來源:動力節(jié)點 瀏覽1201次
1.數(shù)組分頁
原理:進行數(shù)據(jù)庫查詢操作時,獲取到數(shù)據(jù)庫中滿足條件的記錄,保存在對應的List集合中,通過List.subList方法,截取到滿足條件的所有記錄。
實現(xiàn):
首先是dao層,創(chuàng)建UserMapper接口,用于對數(shù)據(jù)庫的操作。在接口中定義查詢數(shù)據(jù)的方法,如下:
List<User> queryUsers();
創(chuàng)建UserMapper.xml,編寫查詢的SQL語句,如下:
<select id="queryUsers" resultMap="BaseResultMap">
SELECT id, nickname, name, pwd, e_mail, is_enable, last_modify_date
FROM user
</select>
創(chuàng)建UserService接口,定義實現(xiàn)分頁的方法
List<User> queryUsers(Integer page,Integer limit);
接下來編寫UserServiceImpl實現(xiàn)類,編寫具體的分頁實現(xiàn)操作:
public List<User> queryUsers(Integer page, Integer limit) {
//從第幾條數(shù)據(jù)開始
int fromIndex = (page-1)*limit;
//到第幾條數(shù)據(jù)結束
int toIndex = page*limit;
//使用subList方法截取滿足條件的數(shù)據(jù)
return userMapper.queryUsers().subList(fromIndex, toIndex);
}
最后在controller編寫測試代碼,這里我前端使用的事LayUI框架,所以對返回數(shù)據(jù)進行了封裝,如下所示:
@GetMapping(value = "queryUsers",produces = "application/json; charset=UTF-8")
@ResponseBody
public ApiResponse queryUsers(Integer page, Integer limit) {
List<User> queryUsers = userService.queryUsers(page, limit);
int countAll = userService.countAll();
if (queryUsers.size() > 0) {
return ApiResponse.ofSuccess(queryUsers, countAll);
}
return ApiResponse.ofMessage(500, "無數(shù)據(jù)");
}
測試結果:

缺點:當查詢數(shù)據(jù)量大的時候,每次查詢對數(shù)據(jù)庫和程序的性能都會產(chǎn)生極大的影響,適合操作數(shù)據(jù)量小的情況下使用
2.limit分頁
首先還是在UserMapper添加分頁查詢的方法:
List<User> queryByLimit(@Param("offset") Integer offset, @Param("limit") Integer limit);
在UserMapper.xml添加具體的操作方法:
<select id="queryByLimit" resultMap="BaseResultMap">
SELECT id, nickname, name, pwd, e_mail, is_enable, last_modify_date
FROM user limit #{offset},#{limit}
</select>
接著編寫service層,編寫UserService接口以及實現(xiàn)類UserServiceImpl對分頁方法的操作:
List<User> selectByLimit(Integer page, Integer limit);
public List<User> selectByLimit(Integer page, Integer limit) {
int offset = (page - 1) * limit;
return userMapper.queryByLimit(offset, limit);
}
最后controller編寫測試方法:
@GetMapping(value = "queryByLimit",produces = "application/json; charset=UTF-8")
@ResponseBody
public ApiResponse queryByLimit(Integer page, Integer limit) {
List<User> queryUsers = userService.queryByLimit(page, limit);
int countAll = userService.countAll();
if (queryByLimit.size() > 0) {
return ApiResponse.ofSuccess(queryByLimit, countAll);
}
return ApiResponse.ofMessage(500, "無數(shù)據(jù)");
}
測試結果:

從輸出結果可以看出與數(shù)據(jù)分頁的查詢結果是一直的,所以limit分頁是沒問題的。
缺點:雖然這里實現(xiàn)了按需查找,每次檢索得到指定的數(shù)據(jù),但是每次在分頁時都要去編寫limit語句,很冗余。而且不方便統(tǒng)一管理,維護性比較差。
以上就是動力節(jié)點小編介紹的"Mybatis分頁方式",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務。