关于mybatis-plus中Ipage 、page 和pageUtils中的区别
在使用人人开源框架的时候,通过逆向工程自动生成了分页功能,然而在使用的时候经常被关于Ipage和page等对象搞混,所以记录这篇文章用来介绍之间的区别
@Overridepublic PageUtils queryPage(Map<String, Object> params) {IPage<OrderFormEntity> page = this.page(new Query<OrderFormEntity>().getPage(params),new QueryWrapper<OrderFormEntity>());return new PageUtils(page);}
可以看见上面就是逆向工程帮忙生成的分页方法
里面出现了三个对象pageUtils、page和Ipage
先来将pageUtils吧,pageUtils是人人代码自己存在的一个功能类,用来包装Ipage
public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {this.list = list;this.totalCount = totalCount;this.pageSize = pageSize;this.currPage = currPage;this.totalPage = (int)Math.ceil((double)totalCount/pageSize);}/*** 分页*/public PageUtils(IPage<?> page) {this.list = page.getRecords();this.totalCount = (int)page.getTotal();this.pageSize = (int)page.getSize();this.currPage = (int)page.getCurrent();this.totalPage = (int)page.getPages();}
目的很简单就是为包装Ipage类,方便后端的调用,下图是后端如何调用pageUtil(其实不用包装也能直接使用Ipage)
if (data && data.code === 0) {this.dataList = data.page.list;this.totalPage = data.page.totalCount;} else {this.dataList = [];this.totalPage = 0;}this.dataListLoading = false;});
接下来再来看Ipage的生成,Ipage的生成调用了mybatis-plus自带的方法this.getPage,方法传入两个参数,一个是page类,一个是qw,通过这个方法,用户可以自定义自己想要的分页数据,简单来说就是在page上再筛选而后得到Ipage。
那么Ipage是怎么生成的呢,很简单创建一个Query对象,通过对象内部的getPage方法,传入参数params获得分页数据
那么Page是怎么生成的呢
public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {//分页参数long curPage = 1;long limit = 10;if(params.get(Constant.PAGE) != null){curPage = Long.parseLong((String)params.get(Constant.PAGE));}if(params.get(Constant.LIMIT) != null){limit = Long.parseLong((String)params.get(Constant.LIMIT));}//分页对象Page<T> page = new Page<>(curPage, limit);//分页参数params.put(Constant.PAGE, page);//排序字段//防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));String order = (String)params.get(Constant.ORDER);//前端字段排序if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){if(Constant.ASC.equalsIgnoreCase(order)) {return page.addOrder(OrderItem.asc(orderField));}else {return page.addOrder(OrderItem.desc(orderField));}}//没有排序字段,则不排序if(StringUtils.isBlank(defaultOrderField)){return page;}//默认排序if(isAsc) {page.addOrder(OrderItem.asc(defaultOrderField));}else {page.addOrder(OrderItem.desc(defaultOrderField));}return page;}
}
传入的params并不会做任何的筛选只会做分页的基本初始化,例如两个参数contant.Page 和constant.LIMIT,如果不做任何要求,那么getPage会使用自己默认的当前页和页最大数,然后创建page对象,在page对象添加排序规则,最后把这个初始好的对象返回回去。
最后this.page再调用底层的selectPage
default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {return this.getBaseMapper().selectPage(page, queryWrapper);}
其实mybatis-plus提供最基本的分页查询就是使用selectPage方法
总结:代码生成器生成的分页查询操作,是通过层层包装selectPage方法,最终获得queryPage,而Ipage是page的包装,pageUtils是Ipage的包装
关于mybatis-plus中Ipage 、page 和pageUtils中的区别相关推荐
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- docx文件上传java_java上传文件通过mybatis存储到数据库的blob格式中.docx
java上传文件通过mybatis存储到数据库的blob格式中.docx 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 上传文件通过 myb ...
- MyBatis框架学习:<select>节点中的resultType和resultMap属性
1.为什么要进行resultType或resultMap注解配置 当需要实现的数据访问是查询类型的,在<select>节点中必须配置resultType或resultMap中的某1个属性( ...
- mysql page_一文理解MySQL中的page页
在介绍InnoDB中的页的时候,很有必要先让大家了解一下InnoDB中的存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间(tablespace),而表空间由 ...
- mybatis 执行插入操作,insert 返回1,数据库中无数据。数据库中数据的创建时间和插入执行时间不一致。
大家好,我是烤鸭: 今天记录一下线上的问题,由于不是我们组的代码,所以没参与全程,只是最后有幸听各位大佬探讨解决方案.mybatis 执行插入操作,insert返回1,日志记录和接口返回都正常,但是数 ...
- 操作系统中的page cache机制
在现代计算机系统中,CPU,RAM,DISK的速度不相同,按速度高低排列 为:CPU>RAM>DISK.CPU与RAM之间.RAM与DISK之间的速度差异常常是指数级.同时,它们之间的处理 ...
- 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置 ...
- 使用asp.net mvc开发应用程序,页面中的page.IsPostback还有用处吗?
本来我对asp.net mvc也研究了一段时间了,我也使用了asp.net mvc开发了两套应用程序,虽然都不是什么大的系统. 今天也想特别提出一个疑问,不知道是我不知道呢,还是本身很难实现在asp. ...
- jQuery Mobile中页面page的data-*选项
全栈工程师开发手册 (作者:栾鹏) jQuery Mobile 所有data-*选项 jQuery Mobile中页面page的data-*选项 带有 data-role="page&quo ...
最新文章
- 敏捷宣言遵循的十二条原则
- sqlite DLL load failed
- matlab2011实验3,matlab实验3探索.doc
- python程序实例教程基础-Python程序设计实例教程
- Paint.Net学习笔记——二、窗体(上)
- 成功者网上创业的精华经验
- java调用下载窗口_java 从网络Url中下载文件 java调用url接口
- 接口测试时,输入所有参数的参数值后,接口返回“参数错误:所有参数都不能为空”
- python读取文件路径乱码 linux_Python之pandas读写文件乱码的解决方法
- 补充总结:现代控制理论
- python asyncio tcp server_关于 asyncio 创建多个 tcp 连接,线程数不准确的问题
- 调整计算机硬盘大小,详细教您怎么调整硬盘分区
- 嵌入式Linux开发|点亮那颗LED灯
- 人人网主页登录_“人人”归来!有人想找前女友,有人想删“黑历史”
- 什么是zone?如何做zone?如何做好zone?
- 谈逻辑与数学界线之淡化
- 【硬见小百科】PCB多层板各层含义与设计原则
- maven报错问题汇总
- 张驰课堂:六西格玛黑带认证的含金量由谁决定?
- Felix入门与实践(一)