mysql oracle Hibernate 的分页

8 篇文章 0 订阅
6 篇文章 0 订阅
  1. Oracle

Oracle通过ROWNUM实现分页,注意有三层select,end表示结束行 start表示开始行,具体代码如下:

SELECT * FROM (

     SELECT ROWNUM RN, A.* FROM (

               SELECT* FROM table d WHERE 1=1 ) A 

               WHERE ROWNUM <=end ) B

     WHERE RN >= start;
  1. MySql

     MySQL实现分页是通过使用limit函数实现的,LIMIT[offset,] rows可以从mysql数据库表中第M条记录开始检索N条记录的语句为: SELECT * FROM 表名称 LIMIT M,N,M可省略。mysql实现分页有两种不同方式,一种是使用COUNT(*)的方式,具体代码如下:
    

SELECT COUNT(*) FROM foo WHERE b = 1;//获得总数

SELECT a FROM foo WHERE b = 1 LIMIT 100,10;

另外一种是使用SQL_CALC_FOUND_ROWS,具体代码如下:

SELECTSQL_CALC_FOUND_ROWS a FROM foo WHERE b = 1 LIMIT 100, 10;

SELECT FOUND_ROWS();//获得总数

从原子性来看,第二种比第一种好。第二种能保证查询语句的原子性,第一种当两个请求之间有额外的操作修改了表的时候,结果就自然是不准确的了,而第二种则不会。但是,一般页面需要进行分页显示的时候,往往并不要求分页的结果非常准确。即分页返回的total总数大1或者小1都是无所谓的,换句话说原子性不是分页关注的重点。

感兴趣的同学可以去网上查查两种方式的性能。这是网友老王的一篇分析文章:http://hi.baidu.com/thinkinginlamp/item/b122fdaea5ba23f614329b14
3. Hibernate

hibernate实现分页比较简单,只需调用setFirstResult()设置起始行,然后调用setMaxResults()设置获取的最大行数。

Session session =getSessionFactory().getCurrentSession();

               Queryquery = session.createQuery(hql);

               query.setFirstResult(start);

               query.setMaxResults(itemsInPrePage);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值