一般程序在处理sql分页的场景,要么选择在程序中对所有的结果集sublist,要么在写sql时指定limit。那如何利用mybatis的特性在处理分页呢?

分页插件

适用于数据量大的情况下。

在真正执行sql之前,通过对StatementHandler的拦截,对原有的sql手动拼接limit处理。此时只会查询出分页的数据。
自定义Interceptor : @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class})})

statementHandler.getBoundSql()

RowBounds

数据量小时可用。
mybatis(7) - 分页-LMLPHP

RowBounds中有两个数字,offset和limit。在处理分页时,只是简单的把offset之前的数据都skip掉,超过limit之后的数据不取出。 就是先把数据全部查询到ResultSet,然后从ResultSet中取出offset和limit之间的数据。

public List<RoleBean> queryRolesByPage(String roleName, int start, int limit) {
        return roleDao.queryRolesByPage(roleName, new RowBounds(start, limit));
    }
    02-16 19:58