知识大全 如何用 Hibernate 实现分页查询

Posted 语句

篇首语:艺术是生活的镜像,生活给了艺术再创造的灵感和力量。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何用 Hibernate 实现分页查询相关的知识,希望对你有一定的参考价值。

如何用 Hibernate 实现分页查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  例如   从第 万条开始取出 条记录       代码:     Query q = session createQuery( from Cat as c );     q setFirstResult( );     q setMaxResults( );     List l = q list();    那么Hibernate底层如何实现分页的呢?实际上Hibernate的查询定义在net sf hibernate loader Loader这个类里面 仔细阅读该类代码 就可以把问题彻底搞清楚     Hibernate 的Loader源代码第 行以下        代码:     if (useLimit) sql = dialect getLimitString(sql);     PreparedStatement st = session getBatcher() prepareQueryStatement(sql   scrollable);      如果相应的数据库定义了限定查询记录的sql语句 那么直接使用特定数据库的sql语句     然后来看net sf hibernate dialect MySQLDialect:       代码:     public boolean supportsLimit()       return true;          public String getLimitString(String sql)       StringBuffer pagingSelect = new StringBuffer( );      pagingSelect append(sql);      pagingSelect append( limit ? ? );      return pagingSelect toString();         这是MySQL的专用分页语句 再来看net sf hibernate dialect Oracle Dialect:       代码:     public boolean supportsLimit()       return true;            public String getLimitString(String sql)       StringBuffer pagingSelect = new StringBuffer( );      pagingSelect append( select * from ( select row_ * rownum rownum_  from ( );      pagingSelect append(sql);      pagingSelect append( ) row_ where rownum <= ?) where rownum_ > ? );      return pagingSelect toString();         Oracle采用嵌套 层的查询语句结合rownum来实现分页 这在Oracle上是最快的方式 如果只是一层或者两层的查询语句的rownum不能支持order by     除此之外 Interbase PostgreSQL HSQL也支持分页的sql语句 在相应的Dialect里面 大家自行参考     如果数据库不支持分页的SQL语句 那么根据在配置文件里面#hibernate jdbc use_scrollable_resultset true默认是true 如果你不指定为false 那么Hibernate会使用JDBC 的scrollableresult来实现分页 看Loader第 行以下        代码:     if ( session getFactory() useScrollableResultSets() )       // we can go straight to the first required row      rs absolute(firstRow);          else       // we need to step through the rows one row at a time (slow)      for ( int m= ; m<firstRow; m++ ) rs next();         如果支持scrollable result 使用ResultSet的absolute方法直接移到查询起点 如果不支持的话 使用循环语句 rs next一点点的移过去     可见使用Hibernate 在进行查询分页的操作上 是具有非常大的灵活性 Hibernate会首先尝试用特定数据库的分页sql 如果没用 再尝试Scrollable 如果不行 最后采用rset next()移动的办法     在查询分页代码中使用Hibernate的一大好处是 既兼顾了查询分页的性能 同时又保证了代码在不同的数据库之间的可移植性 cha138/Article/program/Java/ky/201311/28262

相关参考

知识大全 基于hibernate的开源通用查询框架-bba96

  bba框架当前版本包含  bbacore核心框架封装HibernateCriteria提供方便的查询以及分页支持查询参数  bbastruts基于Struts的开发框架依赖core提供便捷的CRU

知识大全 Hibernate分页的设计和编码

Hibernate分页的设计和编码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当前页码的表单

知识大全 浅析Hibernate Struts分页

浅析HibernateStruts分页  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hiber

知识大全 用hibernate查询一段时间的记录

  这是在一个群里讨论的问题  方法很多如果说数据库中数据的存储是用date类型的话改怎么做如果说做数据迁移的话又该怎么做?  最终的讨论方案在用字符串存储格式上比较好毕竟各个数据库对时间的存储存在差

知识大全 浅谈Struts分页中的Hibernate如何实现

浅谈Struts分页中的Hibernate如何实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Oracle分页查询中排序与效率问题

Oracle分页查询中排序与效率问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原始未分页查

知识大全 oracle,sqlserver2000分页查询

  前台Ext后台ibatis 数据库分页  ORACLE:  SELECT*FROM(SELECT A*ROWNUMRNFROM表名AWHERE 字段名LIKE(%||

知识大全 Struts 中如何实现查询结果分页显示

Struts中如何实现查询结果分页显示  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  messa

知识大全 解决Oracle分页查询中排序与效率问题

解决Oracle分页查询中排序与效率问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  原始未分

知识大全 Oracle、MYSQL、sqlserver和DB2分页查询

Oracle、MYSQL、sqlserver和DB2分页查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看