robbin 写道
再来看net.sf.hibernate.dialect.Oracle9Dialect:
public boolean supportsLimit() {
return true;
}
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。
Oracle的这种实现如果有order by子句依然有问题。某些时候会导致翻页有记录重复或者遗失,很难找到规律,非常奇怪。
后来去google了一下,有Oracle专家说需要order by的时候必须带上unique的字段,例如主键或者rowid等。
另外,在使用这种采用rownum的查询时,尽管速度相对比较快,但是后台Oracle在内存和CPU的消耗上会增加许多。其实除非结果集非常庞大(几万以上),并且必须翻倒很后面(skip的记录很多),采用ResultSet.absolute方法性能还可以,并没有数量级上的差别。
分享到:
相关推荐
本文将深入探讨Hibernate如何实现分页查询,并分析不同数据库方言下的具体实现方式。 #### 二、Hibernate 分页查询概述 Hibernate提供了两种基本的分页查询方法: 1. **基于SQL LIMIT关键字的分页**:这种方式适用...
### Hibernate 实现分页查询详解 #### 一、引言 在进行数据库操作时,为了提高用户体验和系统性能,分页查询是一项非常重要的技术。Hibernate作为Java领域内一个优秀的对象关系映射(ORM)框架,提供了强大的数据...
### 使用Hibernate实现分页查询 #### 一、分页查询概念及原理 分页查询是一种在数据量较大的情况下,为了提高用户体验和系统性能而采取的一种技术手段。它将查询结果分成若干页显示,用户可以通过翻页操作查看不同...
#### 分页原理概述 分页是一种常见的技术手段,用于在数据量较大时提高用户体验。其实现的基本思路是将数据分割成多个小部分,每次只显示其中的一部分数据。用户可以通过翻页操作来查看其他部分的数据。 #### ...
ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询 1.libs目录缺少hibernate核心jar包 2.libs目录缺少struts jar 3.WebRoot目录缺少ExtJs4.2核心类库 以上信息我都在项目里面注明了,因为这些内容的文件太大了,CSDN不...
java+hibernate实现分页 public String execute() throws Exception { System.out.println("Page:" + page); pagePlanList = ps.findPlantByPage(page, rowsPerPage); totalPage = ps.getPlanTotalPage...
本篇将介绍如何使用Struts和Hibernate框架来实现Web应用中的分页功能。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它负责处理用户请求并控制应用程序的流程。而Hibernate则是一...
Hibernate作为一款流行的Java持久化框架,提供了多种方式来实现分页查询。本教程将详细介绍如何在基于Struts框架的项目中利用Hibernate进行分页操作。 【描述】:“基于Struts框架!” Struts是Java Web开发中的...
Hibernate分页查询小结
首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建SQL查询,更加灵活且易于维护。以下是一个简单的分页查询示例: ```java Session session = ...
通常,我们会使用Hibernate提供的原生SQL或者HQL来实现分页查询。例如,可以定义一个`SoftDAO`类,并在其内部实现如下方法: ```java public List<Soft> findPaginated(int start, int pageSize) { Session ...
implementation 'org.hibernate:hibernate-entitymanager' ``` 接下来,我们需要配置数据库连接。在`application.properties`或`application.yml`中设置JDBC连接信息,例如: ```properties spring.datasource.url...
本教程将详细讲解如何使用Hibernate实现分页功能,这对于处理大量数据的Web应用来说至关重要,因为它能够有效地减少数据库负载,提高用户体验。 一、Hibernate分页基础 1. Hibernate的Query和Criteria API都提供了...
【Struts2+Hibernate实现分页详解】 在Java Web开发中,Struts2和Hibernate是两个非常重要的框架,它们分别负责MVC模式中的控制层和持久层。Struts2提供了强大的Action类和拦截器,使得业务逻辑处理更加简洁;而...
一、Hibernate分页原理 Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults属性来实现分页。FirstResult表示从结果集的第几个...
本篇文章将深入探讨Hibernate如何实现分页查询,以及不同数据库环境下分页的策略。 首先,我们可以通过Hibernate的`Query`对象设置分页参数,例如`setFirstResult`指定查询的起始位置,`setMaxResults`限制返回结果...
在Hibernate中,实现分页查询通常涉及到`setFirstResult()`和`setMaxResults()`两个方法。 `setFirstResult(int start)`方法用于设置从数据库中开始获取结果集的位置,这个位置是基于0的索引,所以如果你想要获取第...
在分页场景中,Hibernate的Criteria、Query或HQL语言可以配合FirstResult和MaxResults方法实现分页查询。另外,Hibernate的Criteria API允许我们动态构建查询条件,从而适应不同情况下的分页需求。 在“xxrlmis项目...
4. **分页原理**:分页是为了解决大量数据一次性加载导致性能下降和用户体验不佳的问题。通常包括两个参数:当前页码和每页记录数。在SSH框架中,我们可以在Action中计算总页数,然后通过Hibernate的Criteria或HQL...