Mybatis-plus之RowBounds实现分页查询
物理分页和逻辑分页
物理分页:直接从数据库中拿出我们需要的数据,例如在Mysql中使用limit。
逻辑分页:从数据库中拿出所有符合要求的数据,然后再从这些数据中拿到我们需要的分页数据。
优缺点
物理分页每次都要访问数据库,逻辑分页只访问一次。
物理分页占用内存少,逻辑分页相对较多。
物理分页数据每次都是最新的,逻辑分页有可能滞后。
一般用法
1 public List<Order> queryListByPage(RowBounds rowBounds);
1 dao.queryListPage(new RowBounds(offset,limit));
RowBounds对象有2个属性,offset和limit。
offset:起始行数
limit:需要的数据行数
因此,取出来的数据就是:从第offset+1行开始,取limit行
Mybatis中使用RowBounds实现分页的大体思路:
先取出所有数据,然后游标移动到offset位置,循环取limit条数据,然后把剩下的数据舍弃。
1 private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException { 2 DefaultResultContext<Object> resultContext = new DefaultResultContext(); 3 this.skipRows(rsw.getResultSet(), rowBounds); //游标跳到offset位置 4 //取出limit条数据 5 while(this.shouldProcessMoreRows(resultContext, rowBounds) && rsw.getResultSet().next()) { 6 ResultMap discriminatedResultMap = this.resolveDiscriminatedResultMap(rsw.getResultSet(), resultMap, (String)null); 7 Object rowValue = this.getRowValue(rsw, discriminatedResultMap); 8 this.storeObject(resultHandler, resultContext, rowValue, parentMapping, rsw.getResultSet()); 9 } 10 11 }
1 private void skipRows(ResultSet rs, RowBounds rowBounds) throws SQLException { 2 if (rs.getType() != 1003) { 3 if (rowBounds.getOffset() != 0) { 4 rs.absolute(rowBounds.getOffset()); 5 } 6 } else { //从头开始移动游标,直至offset位置 7 for(int i = 0; i < rowBounds.getOffset(); ++i) { 8 rs.next(); 9 } 10 } 11 12 }
在Mybatis-Plus中的应用
Controller层
1 @RequestMapping(value = "list", method = { RequestMethod.GET, RequestMethod.POST }) 2 @PageableDefaults(sort = "createDate=desc") 3 private void getList(Queryable queryable,String queryStr, PropertyPreFilterable propertyPreFilterable, HttpServletRequest request, 4 HttpServletResponse response) throws IOException { 5 //前端传过来需要的参数,加上id,fastjson会在得到结果集时过滤数据 6 propertyPreFilterable.addQueryProperty("id"); 7 QueryableConvertUtils.convertQueryValueToEntityValue(queryable, entityClass); 8 SerializeFilter filter = propertyPreFilterable.constructFilter(entityClass); 9 //调用service层的分页查询 10 PageJson<OprPrintOrder> pagejson = new PageJson<OprPrintOrder>(service.list(queryable)); 11 //得到需要的结果集后的数据过滤操作 12 String content = JSON.toJSONString(pagejson, filter); 13 JSONObject result = JSONObject.parseObject(content); 14 StringUtils.printJson(response, result.toString()); 15 }
Service层
1 @Override 2 public Page<Order> list(Queryable queryable) { 3 //pageable中有数据查询的要求 4 Pageable pageable = queryable.getPageable(); 5 //封装新的分页查询类 6 com.baomidou.mybatisplus.plugins.Page<Order> page = new com.baomidou.mybatisplus.plugins.Page<Order>(pageable.getPageNumber(), pageable.getPageSize()); 7 //传入RowBounds,page就是RowBounds的子类,这样查询后page就有了总页数与总条数 8 page.setRecords(mapper.selectList(page)); 9 return new PageImpl<Order>(page.getRecords(), pageable, page.getTotal()); 10 }
Mapper层
1 List<Order> selectList(RowBounds rowBounds);
1 <select id="selectList" resultType="Order"> 2 select * from order 3 </select>
转载于:https://www.cnblogs.com/guanghe/p/10026099.html
Mybatis-plus之RowBounds实现分页查询相关推荐
- rowbounds分页oracle,Oracle使用MyBatis中RowBounds实现分页查询功能
Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便. 使用MyBatis中的RowBounds进行 ...
- MyBatis之RowBounds实现分页查询
使用RowBounds实现分页查询很简单. MyBatis的分页是基于内存的分页,即查出来所有记录,再按起始位置和页面容量取出结果. Sql映射: <!-- RowBounds实现分页 --&g ...
- Mybatis中limit用法与分页查询
数据库使用的是mysql 要想在Mybatis中使用分页查询,首先要清楚mysql中limit的用法. limit a,b a是从第a+1条数据开始,b是指读取几条数据 例如:select * fro ...
- 实战 Java 第10天:商品分页查询
实战 Java 第10天:商品分页查询 前言 一.添加pagehelper相关依赖 二.在 ProductService 类中添加接口 三.在 ProductMapper 类中添加接口 四.增加 sq ...
- MyBatis-Plus 之分页查询
推荐:MyBatis Plus汇总 MyBatis-Plus 之分页查询 首先创建一个数据库表,如下图所示: 然后创建一个Spring Boot项目,pom.xml和配置如下: <?xml ve ...
- Mybatis + SpringMVC + Maven实现分页查询
使用Mybatis + Maven + SpringMVC 运行时,突然被需要分页查询的功能给难住了 这里推荐采用的插件是PageHelper这个插件,使用起来十分方便.该插件支持以下数据库: Ora ...
- java mybatis分页查询语句_mybatis分页查询的实现(一)
一.总结了mybatis中五种不同实现分页查询的方法 UserMapper.java接口文件 public interface UserMapper { //分页查询 public List sele ...
- Mybatis最入门---分页查询(逻辑分页与SQL语句分页)
[一步是咫尺,一步即天涯] 到目前为止,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层.但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的.本文,我们将从逻辑分页, ...
- 【Springboot学习笔记】SpringBoot+Mybatis+Thymeleaf+Layui数据表单从零开始实现按条件模糊分页查询的方法
[Springboot学习笔记]SpringBoot+Mybatis+Thymeleaf+Layui数据表单从零开始实现按条件模糊分页查询的方法 目录 1.搭建环境 1.1直接从网上下载SpringB ...
最新文章
- HBase 与 MapReduce 集成
- php选择符和举例子,关于CSS3中选择符的实例详解
- element手机验证格式_vue封装 element-ui form表单验证 正则匹配手机号 自定义校验表格内容...
- win10+Linux双系统安装
- scala 资源 copy 自知乎
- linux下无线网卡的ioctl 接口
- 大数据学习的思维原理和方法?
- 《计算机网络 自顶向下方法》(第7版)答案(第六章)(二)
- 超简单的方法找出QQ共同好友
- 你可以将类似于Google Earth的地球仪嵌入到自己的网站中
- 界面音效以及3D音效通过参数控制声音加载声音资源包
- 微信小程序之如何注册微信小程序
- 全国省市县sql(完整版)
- QStringLiteral(str)
- android调色器的实现
- 如何用VBA从EXCEL表取数据?问题1:1次性整体写入,还是循环写入数组呢? 问题2:取得数据后如何定位需要的那个?
- androID程序!BAT大厂面试基础题集合,附带学习经验
- DM数据库开启归档模式的三种方式
- 偶然发现的一篇文章 激励自己吧。
- 那个服务器的联盟最多的,魔兽世界联盟最多的服务器是哪个
热门文章
- leetcode 滴滴_一个菜逼程序媛的求职历程(秋招已拿阿里、网易、滴滴等校招offer)...
- 奇小葩讲设备树(1/5)-- Linux设备树详解(一) 基础知识
- lisp中怎样调取图形_越玩越聪明的图形思维游戏
- 计算机系统结构树形流程图,计算机系统结构 第七章自考练习题答案
- libcrypto yum 安装_YUM 安装 VSFTP出错
- UIViewController详解
- 电池充放电中的C5A 的意义
- PCB板材结构介绍(z)
- CURL HTTPS POST
- mac中修改系统限制量--ulimit和sysctl