逻辑分页

逻辑分页是强烈不推荐的,但是这里还是把用法写出来吧

Mybatis里面有一个逻辑分页对象RowBounds,里面主要有两个属性,offset和limit(从第几条开始,查询多少条)。我们可以在Mapper接口的方法上加上这个参数,不需要修改xml里面的SQL语句。

接口中定义

public List<User> queryUserList(RowBounds rowBounds);

测试类

@Test
public void test01() throws Exception{init();UserMapper mapper = session.getMapper(UserMapper.class);// 设置分页的数据RowBounds rowBounds = new RowBounds(1,3);List<User> users = mapper.queryUserList(rowBounds);for (User user : users) {System.out.println(user);}
}

RowBounds的工作原理其实是对ResultSet的处理。它会舍弃掉前面offset条数据,然后再取剩下的数据的limit条。

    // DefaultResultSetHandler.javaprivate void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMapresultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMappingparentMapping) throws SQLException {DefaultResultContext<Object> resultContext = new DefaultResultContext();ResultSet resultSet = rsw.getResultSet();this.skipRows(resultSet, rowBounds);while(this.shouldProcessMoreRows(resultContext, rowBounds) &&!resultSet.isClosed() && resultSet.next()) {ResultMap discriminatedResultMap =this.resolveDiscriminatedResultMap(resultSet, resultMap, (String)null);Object rowValue = this.getRowValue(rsw, discriminatedResultMap,(String)null);this.storeObject(resultHandler, resultContext, rowValue, parentMapping,resultSet);}}

很明显。如果数据量大的话,这种翻页方式会很低(跟查询到内存中再使用subList(start, end)没什么区别,所以我们要用到物理翻页。

物理分页

物理翻页是真正的翻页,它是通过数据库支持的语句来翻页。

第一种简单的办法就是传入参数(或者包装一个page对象),在SQL语句翻页。

<select id="selectUserPage" parameterType="map" resultMap="BaseResultMap">select * from t_user limit #{curIndex} , #{pageSize}
</select>

第一个问题是我们在Java业务代码里面计算起止序号,第二个问题是:每个需要翻页的Statement都要编写limit语句,会造成Mapper映射器里面很多代码冗余。

那我们就需要一种通用的方式,不需要去修改配置的任何一条SQL,我们只要传入当前是第几页,每页多少条就可以了,自动计算出来起止序号。

我们最常用的做法就是使用翻页的插件,比如PageHelper。

// pageSize每一页几条
PageHelper.startPage(pn, 10);
List<Employee> emps = employeeService.getAll();
// navigatePages 导航页码数
PageInfo page = new PageInfo(emps, 10);
return Msg.success().add("pageInfo", page);

PageHelper是通过Mybatis的拦截器实现的,插件的具体原理我们后面的再分析。简单来说它会根据PageHelper的参数,改写我们SQL语句,比如MySQL会生成limit语句,Oracle会生成rownum语句,SQL Sever会生成top 语句。

Mybatis 分页操作相关推荐

  1. 转:mybatis - 分页功能

    本文转自http://www.cnblogs.com/jcli/archive/2011/08/09/2132222.html mybatis高级应用系列一:分页功能 Mybatis3.0出来已有段时 ...

  2. mybatis 分页需要的jar包下载_牛逼哄哄的PageHelper分页插件到底牛在哪里?

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 urlify.cn/z2IFn2 推荐:https://www.xttblog. ...

  3. mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper

    MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...

  4. Mybatis分页和Spring的集成

    写了一个Mybatis分页控件,在这记录一下使用方式. 在Maven中加入依赖: ? 1 2 3 4 5 6 7 8 9 <dependencies>   ...     <depe ...

  5. Mybatis分页实现

    一.引言 Mybatis提供了强大的分页拦截实现,可以完美的实现分功能 二.普通的分页实现 普通分页实现即使直接在mapper文件中写分页查询语句 Messsage.xml <?xml vers ...

  6. Mybatis:Mybatis分页插件

    文章目录 1. Mybatis分页插件 1.1 分页插件介绍 1.2 分页插件的使用 1.3 分页插件的参数获取 1.4 分页插件知识小结 分页助手相关 API 1. Mybatis分页插件 1.1 ...

  7. 最详细的Spring+SpringMVC+Mybatis框架整合及mybatis分页讲解,适合初级者

    最详细的关于idea整合ssm框架讲解 一个关于brand(品牌)的项目 [ssm框架搭建源代码及mysql数据库数据]链接:https://pan.baidu.com/s/1eBogklK0rFLj ...

  8. 一步步教你mybatis分页,mybatis分页拦截器 使用,mybatis拦截器分页

              mybatis 分页详解.mybatis分页查询,mybatis分页拦截器使用.struts2下mybatis分页 mybatis默认是支持分页的,内部通过创建可滚动的Result ...

  9. 都这么卷了,不懂MyBatis插件开发怎么行,教你实现一个MyBatis分页插件

    MyBatis可谓是Java开发工程师必须要掌握的持久层框架,它能够让我们更容易的通过Java代码操作数据库,并且它还有很高的扩展性,我们可以自定义插件,去让MyBatis的功能变的更为强大,本篇文章 ...

最新文章

  1. 别在 Java 代码里乱打日志了,这才是正确的日志打印姿势!
  2. Thread系列——Thread.Sleep(0)
  3. mysql课程设计案例_JAVA中MySQL建立连接
  4. linux睡眠进程,linux一个进程如何睡眠
  5. C# 绘制PDF图形——基本图形、自定义图形、色彩透明度
  6. 除了加强风控,大数据还能为FinTech做些什么?
  7. VBA实现数据库中的字段处理(下划线去掉,后面的字母变大写)之版本1.1。
  8. cie规定的标准光源_孩视宝:健康自然的光源是护眼灯发展的重点
  9. C# ffmpeg工具将视频转为SWF格式
  10. 北风:信息差有多重要?你是怎么被割韭菜的?
  11. drupal mysql hash密码_變更drupal7用戶密碼加密方式
  12. 创造力公式和成就感公式
  13. 100兆宽带下载速度为什么没有100兆/秒
  14. 真正高质量的免费高速高防空间!
  15. ZYNQ学习笔记PS部分【基本介绍】
  16. 香油和一个生鸡蛋,干咳偏方
  17. Rouge | 自动文摘及机器翻译评价指标
  18. CRM- Salesforce体验报告
  19. Scrapy模块爬取中华英才网招聘信息(分页)
  20. 图片怎样修改分辨率?用什么修改图片分辨率?

热门文章

  1. jvm-sandbox:基础了解及demo演示
  2. js中对特殊字符进行转义
  3. dorado 刷新_dorado5 datatree 刷新问题
  4. jquery --为当前 li下的a 添加样式
  5. 服务器并发C10K/C100k/C10M问题(重制版)
  6. API 编排的应用及痛点
  7. 原根(知识学习+板子总结+例题+应用)
  8. 沭阳的计算机学校好吗,沭阳初中排名一览表—沭阳县哪个初中最好
  9. 好评度前五的扫地机器人
  10. Hanselminutes播客55-MonoRail作为替代ASP.NET