ibatis中,用什么方式查询分页效率高?

ibatis中,用什么方式查询分页效率高? 我的数据量比较大。

7个回答

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里用的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!