Mybatis-plus分页查询返回之坑

 

 

Mybatis-plus的分页查询,
需要传入,page(分页条件),和Wrapper查询条件,返回一个IPage,这些用过的人都应该知道

注意往下看,我将传入的分页page对象换成同一个,

Page page = new Page(1, 3);
QueryWrapper<TodayNews> rdxwQueryWrapper = new QueryWrapper<>();
rdxwQueryWrapper.lambda().eq(TodayNews::getLabel, "22")
                    .orderByDesc(SuperEntity::getCreateTime);
IPage rdxwIPage = todayNewsMapper.selectPage(page, rdxwQueryWrapper);


QueryWrapper<TodayNews> ckjsQueryWrapper = new QueryWrapper<>();
ckjsQueryWrapper.lambda().eq(TodayNews::getLabel, "23")
                    .orderByDesc(SuperEntity::getCreateTime);
IPage ckjsIPage = todayNewsMapper.selectPage(page, ckjsQueryWrapper);

看到这里,不看结果的情况下,问一句返回的两个IPage对象是否一样呢?

 

结果就是一样的,两个IPage里面的内容一样,对象的地址都是一样的,下面废话不多说直接上图,

毕竟实践才是检验真理的唯一标准:

刚遇到遇到这个问题的时候,我是没有去关注对象的地址的,只关注的IPage对象里的内容为什么会一样,想的问题就是:

1.第二个查询返回的IPage对象会把第一个覆盖掉呢?

2.也不应该覆盖掉啊,因为每个查询返回的IPage对象都是新的,而不是说像传入的分页对象page一样,用的一个

想了一会之后,我以为Mybatis-plus不能这么用, 但是我想不应该啊,然后我就用传统Sql+limt分页,去写了返回多个list集合(因为当时前端等着呢,当时就没有去深究这个问题),

遇到问题之后没有去查看源码,而是去问百度了, 不知道是我没有搜对,还是什么,记得有一个搜到的是一级缓存和二级缓存的原因,但是想了想,我写的每个查询条件都不一样啊,为什么会出现这样的问题呢?

后来请教老大之后,一上来直接看对象地址,返回的两个IPage地址一样,就说明是一个IPage,内容肯定一样。

但是我每个查询都返回新的了啊,应该不至于把。

接着我点进去看了看Mybatis-plus分页查询selectPage这个方法:注意重点来了

/**
 * 根据 entity 条件,查询全部记录(并翻页)
 *
 * @param page         分页查询条件(可以为 RowBounds.DEFAULT)
 * @param queryWrapper 实体对象封装操作类(可以为 null)
 */
 IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

这是查询方法,需要注意的是,这里传入的并不是page对象,而是IPae,那为什么page可以传过去呢?

我们在点进去看对象page的类

public class Page<T> implements IPage<T> 

这就是为什么查询方法接收的是IPage对象,自己穿的page也可以的原因,因为,他继承了IPage,

看到这两个方法忽然间想到一个问题,上面介绍到说两个查询返回的IPage对象是一个,此时不禁在想,是不是分页查询返回的IPage对象是用的传入的page对象呢, 根据传入的page对象里面的分页参数,将查询到的返回数据写入传入的page对象,然后又返回呢?

还是那句话:实践是检验真理的唯一标准,直接上代码

 Page rdxepage=new Page(1, 3);
 QueryWrapper<TodayNews> rdxwQueryWrapper = new QueryWrapper<>();
 rdxwQueryWrapper.lambda().eq(TodayNews::getLabel, "22")
                    .orderByDesc(SuperEntity::getCreateTime);
 IPage rdxwIPage = todayNewsMapper.selectPage(rdxepage, rdxwQueryWrapper);

 Page ckjspage=new Page(1, 3);
 QueryWrapper<TodayNews> ckjsQueryWrapper = new QueryWrapper<>();
 ckjsQueryWrapper.lambda().eq(TodayNews::getLabel, "23")
                    .orderByDesc(SuperEntity::getCreateTime);
 IPage ckjsIPage = todayNewsMapper.selectPage(ckjspage, ckjsQueryWrapper);

page是传入的分页对象,IPage是查询返回对象,传入的对象地址和返回的对象地址一致。

看到这里我想,应该可以印证我的猜测了把。

这里我得出的结论就是Mybatis-plus返回的IPage对象就的传入的分页page对象,将查询返回的数据写入传入的page对象,然后返回一个IPage对象。

各位看官,本文有什么不足的地方,可以直接指出来,毕竟第一次写这种文章,还请各位谅解。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值