引用
使用ibatis,hibernate等,分页已经内部实现了,设置一下就可以了
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的关键类——`...
8. 分页查询:iBatis支持通过设置参数实现分页查询,这对大数据量的展示非常有用。 9. 缓存机制:iBatis提供了本地缓存和二级缓存机制,可以有效减少数据库访问,提高系统性能。开发者可以根据需求选择启用并配置...
- **Hibernate**: 作为一个ORM工具,iBATIS可以与Hibernate等其他持久层框架共存,尽管它们都提供了相似的功能,但有时根据项目需求选择合适的工具会更有优势。 ### iBATIS开发指南资源 - **官方网站**: ***,提供...
Ibatis的核心理念是“SQL就是SQL”,它并不像Hibernate那样尝试完全对象化数据库,而是将数据访问逻辑保留在SQL语句中,通过XML配置文件或注解来绑定SQL与Java对象。这使得开发人员可以充分利用SQL的灵活性,同时...
5. 分页:在大型应用中,分页是必不可少的功能,可以有效管理大量数据并减轻服务器负担。在这个项目中,SpringMVC和Hibernate结合,实现了后端的分页处理,而jQuery则负责前端的分页展示和交互,用户可以轻松地浏览...
本文讲述的就是如何在不重新编译ibatis源码的前提下,为ibatis引入hibernate式的物理分页机制。 基本思路就是找到ibatis执行sql的地方,截获sql并重新组装sql。通过分析ibatis源码知道,最终负责执行sql的类是 ...
与其他数据库持久层框架如JDO、Hibernate相比,Ibatis的最大优势在于其简洁性和易学性。只需掌握JavaBean、XML和SQL的基础知识,开发者就能有效地利用Ibatis发挥出SQL的强大功能。 #### 安装与配置 - **JAR文件和...
SSH2+IBATIS框架是Java开发中常用的一套企业级应用开发框架组合,它将Spring、Hibernate、Struts2和iBatis等组件融合在一起,以提高开发效率和实现松耦合。以下是对这些框架及其整合方式的详细说明: **Spring框架*...
相较于其他ORM框架如Hibernate,iBatis更加轻量级且易于上手。iBatis的核心优势在于其灵活性和简洁性,特别适合于那些对性能有较高要求或者业务逻辑相对简单的应用项目。 #### 二、iBatis的特点 - **小巧易用**:...
iBatis是一个轻量级的持久层框架,与Hibernate等其他ORM框架相比,具有以下特点: ##### 1. 轻量级特性 - **更简单**: iBatis的配置相对简单,只需了解基本的SQL语法和XML配置即可。 - **灵活性高**: 开发者可以...
与Hibernate等全自动的ORM框架不同,iBATIS更倾向于半自动的ORM实现。这意味着开发人员可以手动编写SQL语句并直接控制其执行,同时iBATIS提供了自动的结果集到Java对象的映射,从而大大减少了模板代码的工作量。 ##...
除了基本的查询,iBatis还支持动态SQL、批量操作、分页等功能,这些都是在实际项目中非常实用的能力。例如,动态SQL允许开发者根据不同的条件构建SQL语句,而批量操作则可以提高数据处理的效率。 ### 四、总结 ...
- **性能优势**:在某些场景下,iBatis 的性能优于 Hibernate,特别是在对 SQL 语句有较高定制需求的情况下。 #### 二、iBatis 与 Hibernate 的比较 **2.1 实现机制差异** - **iBatis** 主要通过 SqlMapConfig.xml...
相比于Hibernate等全自动化ORM框架,iBatis更注重SQL的灵活性,开发者可以直接写SQL,更好地适应复杂的数据库操作需求。然而,这同时也意味着开发者需要承担更多的数据库管理和优化工作。 六、iBatis在实际项目中的...
1. **Ibatis简介**:首先,视频会介绍Ibatis的基本概念,包括它的起源、设计理念以及相对于其他ORM框架(如Hibernate)的优势。这将帮助你理解为什么要选择Ibatis作为数据访问工具。 2. **安装与配置**:视频会演示...
Ibatis,一个轻量级的Java持久层框架,虽然不像ORM框架如Hibernate那样提供内置的分页功能,但它可以通过自定义SQL语句实现灵活的分页操作。本篇文章将深入探讨Ibatis实现分页的源码,帮助你理解其工作原理。 首先...
在Ibatis中,可以通过动态SQL来实现排序(ORDER BY)和分页(LIMIT 或 ROWNUM),而在控制器层,Spring MVC 可以处理请求参数,传递分页和排序条件到服务层,从而返回对应的查询结果。 "新增、修改、删除"是CRUD...
与全自动ORM框架如Hibernate相比,iBatis提供了更细粒度的控制,适用于需要高度定制化SQL语句的场景。 #### 二、iBatis的主要特点 1. **SQL封装与外部化**:iBatis将SQL语句封装成类似于函数的形式,输入参数并...
例如,复杂的查询、分页或联表操作,使用Ibatis可以更加直观和高效。 四、配置数据库连接池 高效的数据库连接池是优化数据库操作的关键。在IbatisDemo中,推荐使用如Druid这样的高性能连接池。Druid提供监控、SQL...