一般程序在处理sql分页的场景,要么选择在程序中对所有的结果集sublist,要么在写sql时指定limit。那如何利用mybatis的特性在处理分页呢?
分页插件
适用于数据量大的情况下。
在真正执行sql之前,通过对StatementHandler的拦截,对原有的sql手动拼接limit处理。此时只会查询出分页的数据。
自定义Interceptor : @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class})})
statementHandler.getBoundSql()
RowBounds
数据量小时可用。
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));
}