MybatisPlus实现分页效果并解决错误问题:cant found IPage for args
作者:小花皮猪
前言
早就知道MybatisPlus对分页进行了处理,但是一直没有实战用过,用的是自己封装的一个分页组件,虽不说麻烦吧,但是也不是特别简单。
写起来还是比较复杂,但是最近这个组件有了点小小的bug,我决定是时候放弃它了,毅然加入光荣的进化。
然后我就去摸索使用MybatisPlus封装的分页组件,不用不知道,一用吓一跳。不得不说是真香啊!功能强大且使用简单
吹了这么多,下面就简单下如何使用MybatisPlus实现分页效果
简单说明
核心代码其实就这几行:
Page<ProjectBiddVO> page = new Page<>(pageNo,pageSize); IPage<ProjectBiddVO> projectBiddVOS = projectBiddService.queryListInfo(page,projectBiddvo);
Page就是根据当前页数和显示条数得到的一个结果集
其中,IPage 是分页的关键,将我们需要分页的条件用Page处理,即可达到分页效果。
可以看到有很多里面方法
代码实现
实现起来特别简单,两行代码即可
两个参数pageNo和pageSize,分别是limit的两个参数,对应当前页和每页条数
下面是相关的代码,供大家参考:
controller
这样写有一个问题,就是如果不传pageNo和pageSize,会空指针报错
在controller中前两个参数是必传的,一般后面那个参数是实体,然后将pageNo和pageSize转换为IPage对象,后面只需要传IPage参数和业务参数了,如果只写实现分页,只传IPage就够了。
@ApiOperation(value = "招投标项目-自定义列表查询", notes = "招投标项目-自定义列表查询") @GetMapping(value = "/queryListInfo") public Result<?> queryListInfo(Integer pageNo,Integer pageSize,ProjectBiddVO projectBiddvo) { Page<ProjectBiddVO> page = new Page<>(pageNo,pageSize); IPage<ProjectBiddVO> projectBiddVOS = projectBiddService.queryListInfo(page,projectBiddvo); return Result.OK(projectBiddVOS); }
接口测试:
想要优化这个问题,也很简单,可以给这两个参数默认值,防止空指针
也可以通过if判断参数是否为空,是空的话赋值
这里我选择前者,因为我觉得更简单
@ApiOperation(value = "招投标项目-自定义列表查询", notes = "招投标项目-自定义列表查询") @GetMapping(value = "/queryListInfo") public Result<?> queryListInfo( @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, ProjectBiddVO projectBiddvo) { Page<ProjectBiddVO> page = new Page<>(pageNo,pageSize); IPage<ProjectBiddVO> projectBiddVOS = projectBiddService.queryListInfo(page,projectBiddvo); return Result.OK(projectBiddVOS); }
再来运行一下吧,这次就算不传参,也是不会报错的
不传当前页数默认就是指定的默认值喽,传的话就按照传的值去分页
通过日志可以发现,其实也是先去count了一下总条数,再进行分页处理的
service
IPage<ProjectBiddVO> queryListInfo(Page<ProjectBiddVO> page, ProjectBiddVO projectBiddVO);
serviceImpl
public IPage<ProjectBiddVO> queryListInfo(Page<ProjectBiddVO> page, ProjectBiddVO projectBiddVO) { return projectBiddMapper.queryListInfo(page,projectBiddVO); }
mapper(dao)
IPage<ProjectBiddVO> queryListInfo(Page<ProjectBiddVO> page,@Param("projectBiddVO") ProjectBiddVO projectBiddVO);
mapper(dao).xml
关于xml文件,不用我们手动指定limit的条件了,改怎么写就怎么写就好,MybatisPlus会根据我们的sql查询结果进行分页处理
例如我写的是:
select id, province, city, county, concat(province,city,county) as area, business_code_dic, section_status_dic, project_bidd_code, project_bidd_name, deposit_amount, bidder, open_bidd_time, margins_End_time, del_flag, remark from esgs_project_bidd <where> del_flag = 0 and open_bidd_time > now() and section_status_dic=0 <if test="projectBiddVO.projectBiddName!=null and projectBiddVO.projectBiddName!=''"> and project_bidd_name=#{projectBiddVO.projectBiddName} </if> <if test="projectBiddVO.projectBiddCode!=null and projectBiddVO.projectBiddCode!=''"> and project_bidd_code=#{projectBiddVO.projectBiddCode} </if> <if test="projectBiddVO.bidder!=null and projectBiddVO.bidder!=''"> and bidder=#{projectBiddVO.bidder} </if> <if test="projectBiddVO.openBiddStartTime != null and projectBiddVO.openBiddStartTime != ''"> and open_bidd_time > #{projectBiddVO.openBiddStartTime} </if> <if test="projectBiddVO.openBiddStopTime != null and projectBiddVO.openBiddStopTime != ''"> and open_bidd_time < #{projectBiddVO.openBiddStopTime} </if> </where> <if test="projectBiddVO.area!=null and projectBiddVO.area!=''"> having area like concat(#{projectBiddVO.area}, '%') </if> </select>
解决报错
如果遇到下面啊这个报错信息:
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can’t found IPage for args!
出现这个错误大概率是因为:
我们想要使用分页,且把返回值定义成了IPage ,但是没有把page对象传入到mapper中。且要把这个page放到第一个参数。
错误演示:
正确演示:
总结
到此这篇关于MybatisPlus实现分页效果并解决错误:cant found IPage for args!的文章就介绍到这了,更多相关MybatisPlus实现分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!