物理分页

简单实现ibatis的物理分页

最后都变了- 提交于 2019-12-03 04:24:56
本文是原创文章,转载请注明出处: http://my.oschina.net/fqt/blog/52431 一直以来ibatis的分页都是通过滚动ResultSet实现的,应该算是逻辑分页吧。逻辑分页虽然能很干净地独立于特定数据库,但效率在多数情况下不及特定数据库支持的物理分页,而hibernate的分页则是直接组装sql,充分利用了特定数据库的分页机制,效率相对较高。 网上已有 《使ibatis支持hibernate式的物理分页》等类似的文章以 继承 SqlExecutor的方式 实现了物理分页, 但是 侵入性非常强,还得实现数据库方言 ,方法非常复杂。同时 SqlExecutor不是接口,对它的方法继承也不能保证版本稳定。本文中将介绍的方式是实现queryWithSqlHandler方法,在查询前将通过SqlHandler接口把sql传给调用者,再用处理后的sql进行最终查询,从而实现物理分页等功能: //用queryWithSqlHandler方法实现物理分页的例子: public Page queryPage(String statementId, param, final Page page){ final int pageNum = page.getPageNum(); final int pageSize = page.getPageSize(); List list