Mybatis 分页操作
逻辑分页
逻辑分页是强烈不推荐的,但是这里还是把用法写出来吧
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 分页操作相关推荐
- 转:mybatis - 分页功能
本文转自http://www.cnblogs.com/jcli/archive/2011/08/09/2132222.html mybatis高级应用系列一:分页功能 Mybatis3.0出来已有段时 ...
- mybatis 分页需要的jar包下载_牛逼哄哄的PageHelper分页插件到底牛在哪里?
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 urlify.cn/z2IFn2 推荐:https://www.xttblog. ...
- mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper
MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...
- Mybatis分页和Spring的集成
写了一个Mybatis分页控件,在这记录一下使用方式. 在Maven中加入依赖: ? 1 2 3 4 5 6 7 8 9 <dependencies> ... <depe ...
- Mybatis分页实现
一.引言 Mybatis提供了强大的分页拦截实现,可以完美的实现分功能 二.普通的分页实现 普通分页实现即使直接在mapper文件中写分页查询语句 Messsage.xml <?xml vers ...
- Mybatis:Mybatis分页插件
文章目录 1. Mybatis分页插件 1.1 分页插件介绍 1.2 分页插件的使用 1.3 分页插件的参数获取 1.4 分页插件知识小结 分页助手相关 API 1. Mybatis分页插件 1.1 ...
- 最详细的Spring+SpringMVC+Mybatis框架整合及mybatis分页讲解,适合初级者
最详细的关于idea整合ssm框架讲解 一个关于brand(品牌)的项目 [ssm框架搭建源代码及mysql数据库数据]链接:https://pan.baidu.com/s/1eBogklK0rFLj ...
- 一步步教你mybatis分页,mybatis分页拦截器 使用,mybatis拦截器分页
mybatis 分页详解.mybatis分页查询,mybatis分页拦截器使用.struts2下mybatis分页 mybatis默认是支持分页的,内部通过创建可滚动的Result ...
- 都这么卷了,不懂MyBatis插件开发怎么行,教你实现一个MyBatis分页插件
MyBatis可谓是Java开发工程师必须要掌握的持久层框架,它能够让我们更容易的通过Java代码操作数据库,并且它还有很高的扩展性,我们可以自定义插件,去让MyBatis的功能变的更为强大,本篇文章 ...
最新文章
- 别在 Java 代码里乱打日志了,这才是正确的日志打印姿势!
- Thread系列——Thread.Sleep(0)
- mysql课程设计案例_JAVA中MySQL建立连接
- linux睡眠进程,linux一个进程如何睡眠
- C# 绘制PDF图形——基本图形、自定义图形、色彩透明度
- 除了加强风控,大数据还能为FinTech做些什么?
- VBA实现数据库中的字段处理(下划线去掉,后面的字母变大写)之版本1.1。
- cie规定的标准光源_孩视宝:健康自然的光源是护眼灯发展的重点
- C# ffmpeg工具将视频转为SWF格式
- 北风:信息差有多重要?你是怎么被割韭菜的?
- drupal mysql hash密码_變更drupal7用戶密碼加密方式
- 创造力公式和成就感公式
- 100兆宽带下载速度为什么没有100兆/秒
- 真正高质量的免费高速高防空间!
- ZYNQ学习笔记PS部分【基本介绍】
- 香油和一个生鸡蛋,干咳偏方
- Rouge | 自动文摘及机器翻译评价指标
- CRM- Salesforce体验报告
- Scrapy模块爬取中华英才网招聘信息(分页)
- 图片怎样修改分辨率?用什么修改图片分辨率?