eeliangsoft
cebuleo
2010-12-30 12:14
浏览 327
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • beneo
    beneo 2010-12-30 12:19
    已采纳

    ibatis 又不是数据库,它又不知道如何分页。。他只是一个sql builder

    比如mysql里面的分页是用limit offset来做的,你就用ibatis写一个limit offset好了

    其它类型的数据库以此类推。

    与其说分页的效率,不如说是你sql语句查询的效率如何,最简单看有查询有没有用到索引,在mysql里面用explain select xxxx from xxx where

    点赞 评论
  • JRrrrrr
    JRrrrrr 2010-12-30 12:29

    ibatis分页解决方式是通过JDBC ResultSet的next方法或absolute方法来实现,效率和资源的消耗比不上sql语句层面的分页。
    给你一篇文章:
    http://www.blogjava.net/libin2722/articles/192504.html

    根据不同数据库实现的不同分页方言,建议参考Hibernate源码。

    点赞 评论
  • iteye_4873
    iteye_4873 2010-12-30 12:32

    数据量大应该考虑每次只读一页数据的方式来分页~
    在ibatis配置文件里写好分页SQL就好~
    效率的话 写好SQL可以看看执行计划~

    看有没有使用到索引,如果没,新建适当的索引

    点赞 评论
  • zhanjia
    二进制之路 2010-12-30 12:37

    如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]

    点赞 评论
  • zhanjia
    二进制之路 2010-12-30 12:38

    其他数据库可以采用类似的数据库分页方式,这种方式快

    点赞 评论
  • beneo
    beneo 2010-12-30 12:53

    我有些不解了,分页不是也面上指定现实多少数据么?

    limit offset不就完了么?? 嵌套的select 多麻烦阿,ibatis缓存结果神马的,多麻烦阿

    点赞 评论
  • JRrrrrr
    JRrrrrr 2010-12-30 13:30

    三层嵌套是oracle实现方式
    limit offset是mysql里用的

    点赞 评论

相关推荐