博为峰JavaEE技术文章 ——MyBatis RowBounds分页

  博为峰JavaEE技术文章 ——MyBatis RowBounds分页_第1张图片

我们知道,在查询数据库时,如果数据库表中的数据比较多,都会使用到分页技术。Mybatis也支持分页查询,可以借助RowBounds对象,对数据分页,但是,基于RowBounds的分页是对ResultSet结果集进行分页,也就是逻辑分页,并不是物理分页。换句话说,也就是先把数据库中的数据全部查询出来,然后在进行过滤。今天小博老师先给大家介绍下RowBounds对象的 使用,下节课我们再探讨如何实现物理分页。

先来了解下RowBounds类的源码:

博为峰JavaEE技术文章 ——MyBatis RowBounds分页_第2张图片 

这个类很简单,只有offset和limit两个参数,表示从第几条开始,取多少条。

接下来看看Mybatis默认分页实现方法org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap()的源码:

博为峰JavaEE技术文章 ——MyBatis RowBounds分页_第3张图片 

对查询出的结果进行skipRows处理,skipRows代码如下:

博为峰JavaEE技术文章 ——MyBatis RowBounds分页_第4张图片

skipRows只是根据rowBounds对象的offset参数,跳过或者滚动到具体的起始行。

再来看看shouldProcessMoreRows:


由此可以看出,Mybatis默认的RowBounds分页是对ResultSet的分页,执行效率不会很理想。如果要实现高效率的分页,可以通过拦截器的方式实现。下节课我们实现一个简单的分页拦截器。这里判断读取的结果集数量是否与rowBounds对象 limit参数相符,如果以获取到相应数量的结果,则不再继续执行。


你可能感兴趣的:(博为峰JavaEE技术文章 ——MyBatis RowBounds分页)