关于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的作者可能感觉这样一个方法会开发者对起产生依赖,而忽略其中的系能问题,并经常使用,但是这对应用程序并不是很好的一种做法,特别数据量较大的系统中。