关于ibatis中queryForPaginatedList方法的分析 | 舞命小丢

来源:百度文库 编辑:神马文学网 时间:2024/04/28 01:39:11

刚刚开始学习ibatis,在使用发现ibatis中一个重要特性会在未来版本取消!

这个就是分页特性

现在在2.3中已经设置SqlMapper.QueryForPaginatedList方法为Deprecated了.

刚开始我发现这个queryForPaginatedList这个方法,感觉眼前一亮,既然让自己写SQL语句,还可以为我们实现分页,这不错 啊!HIbernate中虽然可以实现分页,是因为它知道我们使用的是什么数据库,可以指定不同的分页策略,但是ibatis中不会分辨数据库。所以很想 了解它的实现方法。

然后发现这个方法被设置为了Deprecated,还以为提供了更好的方法,一般在程序中会是这样。
在Google中搜索了一下,在官方网站上看到在未来版本中将要被删除,甚是不解。

就自己在网上查找了一下,发现其中的奥秘。

一篇对queryForPaginatedList进行很好的分析的文章,使我茅塞顿开。

http://ivanl.javaeye.com/blog/24739

作者对这个方法的性能进行了分析,并对源代码进行了分析,这种学习方式值得学习。

发现其中的问题,ibatis中的分页并不是基于数据库的分页,而是一种基于JDBC驱动的分页方式,所以其中的效率会跟驱动的性能有很大关系。和原生的数据库分页之间有很大的性能差别。

作者还列举了这个方法的调用顺序:

调用次序如下SqlMapClientImpl.queryForPaginatedList->SqlMapSessionImpl.queryForPaginatedList
->SqlMapExecutorDelegate.queryForPaginatedList->GeneralStatement.executeQueryForList
->GeneralStatment.executeQueryWithCallback->GeneralStatment.executeQueryWithCallback
->SqlExecutor.executeQuery->SqlExecutor.handleMultipleResults()

我估计ibatis的作者可能感觉这样一个方法会开发者对起产生依赖,而忽略其中的系能问题,并经常使用,但是这对应用程序并不是很好的一种做法,特别数据量较大的系统中。