MyBatis 的三种分页方式你学废了嘛?

本文介绍了MyBatis的三种分页方式:基于Limit的物理分页,RowBounds的逻辑分页(不推荐),以及PageHelper分页插件的使用。重点讲述了PageHelper插件的简便性和物理分页效率,推荐使用Mapper接口方式调用。
摘要由CSDN通过智能技术生成

@Test

public void selectUser() {

SqlSession session = MybatisUtils.getSession();

UserMapper mapper = session.getMapper(UserMapper.class);

//这里塞值

Map<String,Object> 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();

}

执行结果:

传入0,10时:

总结:

  • limit 0,10;

  • 0 代表从第0条数据开始

  • 10 代表查10条数据

  • 等到第二页的时候就是 limit 10,10;

  • 以此类推!

这些内容其实就时MySQL中的内容,不作再详细讲解了。

3

RowBounds分页(不推荐使用)

  • RowBounds帮我们省略了limit的内容,我们只需要在业务层关注分页即可!无须再传入指定数据!

  • 但是,这个属于逻辑分页,即实际上sql查询的是所有的数据,在业务层进行了分页而已,比较占用内存,而且数据更新不及时,可能会有一定的滞后性!不推荐使用!

  • RowBounds对象有2个属性,offset和limit。

  1. offset:起始行数

  2. limit:需要的数据行数

  3. 因此,取出来的数据就是:从第offset+1行开始,取limit行

  • 业务层代码:

@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);

select * from user

执行查看结果:

4

Mybatis_PageHelper分页插件

官方GitHub地址

官方地址:https://github.com/pagehelper/Mybatis-PageHelper

引入jar包

com.github.pagehelper

pagehelper

5.1.7

配置MyBatis核心配置文件

业务层代码

@Test

public void selectUserPageHelper() {

SqlSession session = MybatisUtils.getSession();

UserMapper mapper = session.getMapper(UserMapper.class);

//第二种,Mapper接口方式的调用,推荐这种使用方式。

PageHelper.startPage(1, 3);

List list = mapper.getUserInfo();

//用PageInfo将包装起来

PageInfo page = new PageInfo(list);

for (User map: list){

System.out.println(map);

}

System.out.println(“page:—”+page);

session.close();

}

执行结果

总结

PageHelper还是很好用的,也是物理分页!

实际上我们一般用第二种比较多:Mapper接口方式的调用

//第一种,RowBounds方式的调用

List list = sqlSession.selectList(“x.y.selectIf”, null, new RowBounds(0, 10));

//第二种,Mapper接口方式的调用,推荐这种使用方式。

PageHelper.startPage(1, 10);

List list = userMapper.selectIf(1);

//第三种,Mapper接口方式的调用,推荐这种使用方式。

PageHelper.offsetPage(1, 10);

List list = userMapper.selectIf(1);

//第四种,参数方法调用

//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数

public interface CountryMapper {

List selectByPageNumSize(

@Param(“user”) User user,

@Param(“pageNum”) int pageNum,

@Param(“pageSize”) int pageSize);

}

//配置supportMethodsArguments=true

//在代码中直接调用:

List list = userMapper.selectByPageNumSize(user, 1, 10);

//第五种,参数对象

//如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

ity.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

[外链图片转存中…(img-YNFrASfk-1711400828264)]

需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值