ibatis中,用什么方式查询分页效率高? 我的数据量比较大。
ibatis 又不是数据库,它又不知道如何分页。。他只是一个sql builder
比如mysql里面的分页是用limit offset来做的,你就用ibatis写一个limit offset好了
其它类型的数据库以此类推。
与其说分页的效率,不如说是你sql语句查询的效率如何,最简单看有查询有没有用到索引,在mysql里面用explain select xxxx from xxx where
ibatis分页解决方式是通过JDBC ResultSet的next方法或absolute方法来实现,效率和资源的消耗比不上sql语句层面的分页。
给你一篇文章:
http://www.blogjava.net/libin2722/articles/192504.html
根据不同数据库实现的不同分页方言,建议参考Hibernate源码。
数据量大应该考虑每次只读一页数据的方式来分页~
在ibatis配置文件里写好分页SQL就好~
效率的话 写好SQL可以看看执行计划~
看有没有使用到索引,如果没,新建适当的索引
如Oracle分页可以这么写,currentPage为当前页号,pageSize为每页记录数
[code="sql"]
select *
from
(select t.*, rownum rn
from
(select a.name,
a.sex
from usercount
) t
where rownum <![CDATA[<=]]> #currentPage# * #pageSize#
)
where rn <![CDATA[>]]> (#currentPage# - 1) * #pageSize#
[/code]
其中,分页部分语句是固定的,只需要替换内部的sql语句
[code="sql"]
select *
from
(select t.*, rownum rn
from
(
只需要替换这里的sql语句
) t
where rownum <![CDATA[<=]]> #currentPage# * #pageSize#
)
where rn <![CDATA[>]]> (#currentPage# - 1) * #pageSize#
[/code]
其他数据库可以采用类似的数据库分页方式,这种方式快
我有些不解了,分页不是也面上指定现实多少数据么?
limit offset不就完了么?? 嵌套的select 多麻烦阿,ibatis缓存结果神马的,多麻烦阿
三层嵌套是oracle实现方式
limit offset是mysql里用的