基于Hibernate分页原理的Oracle专用高效万能分页控件
2005-02-10 14:49
609 查看
打字麻烦。大家看flash吧。
Hibernate 可以实现分页查询,例如:
从第2万条开始取出100条记录
Query q = session.createQuery("from Cat as c");
q.setFirstResult(20000);
q.setMaxResults(100);
List l = q.list();
那么Hibernate底层如何实现分页的呢?实际上Hibernate的查询定义在net.sf.hibernate.loader.Loader这个类里面,仔细阅读该类代码,就可以把问题彻底搞清楚。
Hibernate2.0.3的Loader源代码第480行以下:
if (useLimit) sql = dialect.getLimitString(sql);
PreparedStatement st = session.getBatcher().prepareQueryStatement(sql, scrollable);
如果相应的数据库定义了限定查询记录的sql语句,那么直接使用特定数据库的sql语句。
public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
return pagingSelect.toString();
}
Oracle采用嵌套3层的查询语句结合rownum来实现分页,这在Oracle上是最快的方式,如果只是一层或者两层的查询语句的rownum不能支持order by。
下载flash
http://218.75.77.154/zfj/word/TzhPager.swf
下载控件自已玩玩。(请不要用于商业开发,本版本目前仅限技术研究)
http://218.75.77.154/zfj/word/TzhPager.dll
年后,把控件的代码再理一理。打算把sql server ,access的分页也都整合到一起,因为目前我都是分开写的。每个也就1000来行代码,应该可以合到一块。
到时看大家的回贴热情了。该共享就共享,该开源就开源。大过年的,还在写技术贴,无聊呀。
Hibernate 可以实现分页查询,例如:
从第2万条开始取出100条记录
Query q = session.createQuery("from Cat as c");
q.setFirstResult(20000);
q.setMaxResults(100);
List l = q.list();
那么Hibernate底层如何实现分页的呢?实际上Hibernate的查询定义在net.sf.hibernate.loader.Loader这个类里面,仔细阅读该类代码,就可以把问题彻底搞清楚。
Hibernate2.0.3的Loader源代码第480行以下:
if (useLimit) sql = dialect.getLimitString(sql);
PreparedStatement st = session.getBatcher().prepareQueryStatement(sql, scrollable);
如果相应的数据库定义了限定查询记录的sql语句,那么直接使用特定数据库的sql语句。
public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
return pagingSelect.toString();
}
Oracle采用嵌套3层的查询语句结合rownum来实现分页,这在Oracle上是最快的方式,如果只是一层或者两层的查询语句的rownum不能支持order by。
下载flash
http://218.75.77.154/zfj/word/TzhPager.swf
下载控件自已玩玩。(请不要用于商业开发,本版本目前仅限技术研究)
http://218.75.77.154/zfj/word/TzhPager.dll
年后,把控件的代码再理一理。打算把sql server ,access的分页也都整合到一起,因为目前我都是分开写的。每个也就1000来行代码,应该可以合到一块。
到时看大家的回贴热情了。该共享就共享,该开源就开源。大过年的,还在写技术贴,无聊呀。
相关文章推荐
- ORACLE分页查询SQL语法——最高效的分页
- 基于linq2sql的分页控件(自己写的)
- 基于Bootstrap仿淘宝分页控件实现
- struts2.0+hibernate+oracle的分页详解
- Hibernate不支持Oracle对字符串排序后的基于rownum的取数方式
- Hibernate对oracle的分页支持情况。OracleDialect和Oracle9Dialect的一个性能差别。
- ORACLE分页查询SQL语法——最高效的分页
- Oracle中的SQL分页查询原理和方法详解 (转)
- Coolite之数据源(store)分页,基于Sql2000存储过程(高效分页)
- 基于Spring+Hibernate+Struts框架分页的一种实现
- Hibernate实现分页查询的原理分析
- 实现Hibernate分页查询原理解读
- 高效的mysql分页方法及原理
- oracle高效分页存储过程
- 分页技术原理与实现之Java+Oracle代码实现分页(二)
- JAVA WEB开发之基于xml配置文件的分页实现(一) 分页配置原理
- Oracle之分页高效查询
- Oracle sql分页查询(高效)
- .NET基于分页控件实现真分页功能
- Oracle专用服务器、共享服务器监听原理