1)hibernate
Query q = session.createQuery("from Cat as c");
q.setFirstResult(50);
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语句。
然后来看net.sf.hibernate.dialect.MySQLDialect:
public boolean supportsLimit() {
return true;
}
public String getLimitString(String sql) {
StringBuffer pagingSelect = new StringBuffer(100);
pagingSelect.append(sql);
pagingSelect.append(" limit ?, ?");
return pagingSelect.toString();
}
这是MySQL的专用分页语句,再来看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。
2)ibatis
PaginatedList list =sqlMap.queryForPaginatedList ("getProductList”, null, 10);
list.nextPage();
list.previousPage();
分享到:
相关推荐
公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在...想了很多办法,都没能很好的避免这个问题,无意间在javaeye上看到了《使ibatis支持hibernate式的物理分页》这篇文章,
针对iBatis的这一局限,我们可以尝试在不修改iBatis源码的情况下,引入类似于Hibernate的物理分页机制。这个过程主要涉及对SQL执行流程的拦截和改造。首先,我们需要了解iBatis执行SQL的关键类——`...
本文讲述的就是如何在不重新编译ibatis源码的前提下,为ibatis引入hibernate式的物理分页机制。 基本思路就是找到ibatis执行sql的地方,截获sql并重新组装sql。通过分析ibatis源码知道,最终负责执行sql的类是 ...
本项目是一个基于SpringMVC、Spring、Hibernate和jQuery的完整分页应用,涵盖了后端服务、数据持久化、前端交互等多个重要技术领域。下面将详细解释这些技术及其在项目中的应用。 1. SpringMVC:SpringMVC是Spring...
Ibatis,一个轻量级的Java持久层框架,虽然不像ORM框架如Hibernate那样提供内置的分页功能,但它可以通过自定义SQL语句实现灵活的分页操作。本篇文章将深入探讨Ibatis实现分页的源码,帮助你理解其工作原理。 首先...
SSH2+IBATIS框架是Java开发中常用的一套企业级应用开发框架组合,它将Spring、Hibernate、Struts2和iBatis等组件融合在一起,以提高开发效率和实现松耦合。以下是对这些框架及其整合方式的详细说明: **Spring框架*...
此外,由于Hibernate的自动管理特性,对于某些特定的数据库优化操作,如分页查询、批处理更新等,可能不如iBatis那么直接和高效。 其次,iBatis的学习曲线相对较平缓,因为它允许开发者保留对SQL的直接控制。而...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
iBatis是一个轻量级的持久层框架,与Hibernate等其他ORM框架相比,具有以下特点: ##### 1. 轻量级特性 - **更简单**: iBatis的配置相对简单,只需了解基本的SQL语法和XML配置即可。 - **灵活性高**: 开发者可以...
例如,复杂的查询、分页或联表操作,使用Ibatis可以更加直观和高效。 四、配置数据库连接池 高效的数据库连接池是优化数据库操作的关键。在IbatisDemo中,推荐使用如Druid这样的高性能连接池。Druid提供监控、SQL...
Hibernate分页等实用技术,Hibernate实战部分则用... (展开全部) 本书由互联网上影响广泛的开放文档OpenDoc系列自由文献首份文档“Hibernate开发指南”发展而来。在编写过程中,进行了重新构思与组织,同时对内容的...
- **性能优势**:在某些场景下,iBatis 的性能优于 Hibernate,特别是在对 SQL 语句有较高定制需求的情况下。 #### 二、iBatis 与 Hibernate 的比较 **2.1 实现机制差异** - **iBatis** 主要通过 SqlMapConfig.xml...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
第10章 Hibernate益友——iBatis 10.1 Ibatis 概述 10.2 快速起步 10.3 IBatis 基础 10.4 iBatis高级特性 10.5 IBatis周边 第11章 工具卡片和软件 11.1 工具卡片 11.2 Eclipse安装和基本使用方法 11.3 快速...
相较于其他ORM框架如Hibernate,iBatis更加轻量级且易于上手。iBatis的核心优势在于其灵活性和简洁性,特别适合于那些对性能有较高要求或者业务逻辑相对简单的应用项目。 #### 二、iBatis的特点 - **小巧易用**:...