美團(tuán)一面:MyBatis 的 3 種分頁,還有誰不會?
閱讀本文大概需要 4 分鐘。
來自:https://blog.csdn.net/weixin_43829443/article/details/119912221
一、Limit分頁
?limit?${startPos},${pageSize}
?
?<if?test="startPos!=null?and?pageSize!=null">
????limit?${startPos},${pageSize}
if>
?
?
?
?List ?getUserInfo1(Map ;?map)
?
?@Test
?public?void?selectUser()?{
?????SqlSession?session?=?MybatisUtils.getSession();
?????UserMapper?mapper?=?session.getMapper(UserMapper.class);
?????//這里塞值
??????Map?parms?=?new?HashMap<>();
??????parms.put("startPos","0");
??????parms.put("pageSize","5");
?????List?users?=?mapper.getUserInfo1(parms);
?????for?(User?map:?users){
?????????System.out.println(map);
????}
?????session.close();
}
?


limit 0,10; 0 代表從第0條數(shù)據(jù)開始 10 代表查10條數(shù)據(jù) 等到第二頁的時候就是 limit 10,10;
二、RowBounds分頁(不推薦使用)
offset:起始行數(shù) limit:需要的數(shù)據(jù)行數(shù)
?@Test
public?void?selectUserRowBounds()?{
????SqlSession?session?=?MybatisUtils.getSession();
????UserMapper?mapper?=?session.getMapper(UserMapper.class);
????//?List?users?=?session.selectList("com.dy.mapper.UserMapper.getUserInfoRowBounds",null,new?RowBounds(0,?5));
????List?users?=?mapper.getUserInfoRowBounds(new?RowBounds(0,5));
????for?(User?map:?users){
????????System.out.println(map);
????}
????session.close();
}
?
?List ?getUserInfoRowBounds(RowBounds?rowBounds) ;
?
?
?

三、Mybatis_PageHelper分頁插件
https://github.com/pagehelper/Mybatis-PageHelper
?
???com.github.pagehelper
???pagehelper
???5.1.7
?
?
????"com.github.pagehelper.PageInterceptor"?/>
?


?//第一種,RowBounds方式的調(diào)用
List?list?=?sqlSession.selectList("x.y.selectIf",?null,?new?RowBounds(0,?10));
//第二種,Mapper接口方式的調(diào)用,推薦這種使用方式。
PageHelper.startPage(1,?10);
List?list?=?userMapper.selectIf(1);
//第三種,Mapper接口方式的調(diào)用,推薦這種使用方式。
PageHelper.offsetPage(1,?10);
List?list?=?userMapper.selectIf(1);
//第四種,參數(shù)方法調(diào)用
//存在以下?Mapper?接口方法,你不需要在?xml?處理后兩個參數(shù)
public?interface?CountryMapper?{
????List?selectByPageNumSize( ;
????????????@Param("user")?User?user,
????????????@Param("pageNum")?int?pageNum,?
????????????@Param("pageSize")?int?pageSize)
}
//配置supportMethodsArguments=true
//在代碼中直接調(diào)用:
List?list?=?userMapper.selectByPageNumSize(user,?1,?10);
//第五種,參數(shù)對象
//如果?pageNum?和?pageSize?存在于?User?對象中,只要參數(shù)有值,也會被分頁
//有如下?User?對象
public?class?User?{
????//其他fields
????//下面兩個參數(shù)名和?params?配置的名字一致
????private?Integer?pageNum;
????private?Integer?pageSize;
}
//存在以下?Mapper?接口方法,你不需要在?xml?處理后兩個參數(shù)
public?interface?CountryMapper?{
????List?selectByPageNumSize(User?user) ;
}
//當(dāng)?user?中的?pageNum!=?null?&&?pageSize!=?null?時,會自動分頁
List?list?=?userMapper.selectByPageNumSize(user);
//第六種,ISelect?接口方式
//jdk6,7用法,創(chuàng)建接口
Page?page?=?PageHelper.startPage(1,?10).doSelectPage(new?ISelect()?{
????@Override
????public?void?doSelect()?{
????????userMapper.selectGroupBy();
????}
});
//jdk8?lambda用法
Page?page?=?PageHelper.startPage(1,?10).doSelectPage(()->?userMapper.selectGroupBy());
//也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
pageInfo?=?PageHelper.startPage(1,?10).doSelectPageInfo(new?ISelect()?{
????@Override
????public?void?doSelect()?{
????????userMapper.selectGroupBy();
????}
});
//對應(yīng)的lambda用法
pageInfo?=?PageHelper.startPage(1,?10).doSelectPageInfo(()?->?userMapper.selectGroupBy());
//count查詢,返回一個查詢語句的count數(shù)
long?total?=?PageHelper.count(new?ISelect()?{
????@Override
????public?void?doSelect()?{
????????userMapper.selectLike(user);
????}
});
//lambda
total?=?PageHelper.count(()->userMapper.selectLike(user));
?

推薦閱讀:
SpringBoot 實現(xiàn) PDF 添加水印有哪些方案?
互聯(lián)網(wǎng)初中高級大廠面試題(9個G) 內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!
?戳閱讀原文領(lǐng)?。?/span>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱?
評論
圖片
表情


