我们知道,在查询数据库时,如果数据库表中的数据比较多,都会使用到分页技术。Mybatis也支持分页查询,可以借助RowBounds对象,对数据分页,但是,基于RowBounds的分页是对ResultSet结果集进行分页,也就是逻辑分页,并不是物理分页。换句话说,也就是先把数据库中的数据全部查询出来,然后在进行过滤。今天小博老师先给大家介绍下RowBounds对象的 使用,下节课我们再探讨如何实现物理分页。
先来了解下RowBounds类的源码:
这个类很简单,只有offset和limit两个参数,表示从第几条开始,取多少条。
接下来看看Mybatis默认分页实现方法org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap()的源码:
对查询出的结果进行skipRows处理,skipRows代码如下:
skipRows只是根据rowBounds对象的offset参数,跳过或者滚动到具体的起始行。
再来看看shouldProcessMoreRows:
由此可以看出,Mybatis默认的RowBounds分页是对ResultSet的分页,执行效率不会很理想。如果要实现高效率的分页,可以通过拦截器的方式实现。下节课我们实现一个简单的分页拦截器。这里判断读取的结果集数量是否与rowBounds对象 的limit参数相符,如果以获取到相应数量的结果,则不再继续执行。