看了网上那么多关于hibernateCallBack的解释,我总结了一下:说白了,hibernateCallBack主要是封装了对异常和事物的处理,以及完成了需要在执行某一方法时,同时执行另外一个方法,有点类似触发器。比如:你获取到某一大数量的结果集,你想在返回结果集得同时,就将他们分页显示,只是就可以采用hibernateCallBack回调机制来完成这一操作。
API:
http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/orm/hibernate3/HibernateCallback.html
BlogJava对hibernateCallBack的解释,蛮好的
http://www.blogjava.net/caixuetao/articles/113433.html
下面的是从网上淘来的一点解释,助理解
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。
HibernateTemplate的灵活访问方式是通过如下两个方法完成:
(1)Object execute(HibernateCallback action)
(2)List execute(HibernateCallback action)
这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。
程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),
该方法只有一个参数Session。通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
方法doInHibernate的方法体就是Spring执行的持久化操作。
还有的就是采用:
HibernateTemplate.execute(HibernateCallback action)这种回调的方式,封装了对异常的处理和对事务的一些处理。
如:
Java代码
public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {
// ......(省略)
// ......
try {
previousFlushMode = applyFlushMode(session, existingTransaction);
enableFilters(session);
Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));
Object result = action.doInHibernate(sessionToExpose);
flushIfNecessary(session, existingTransaction);
return result;
}catch (HibernateException ex){
//省略
}
}catch (SQLException ex){
// ......(省略)
}catch (RuntimeException ex) {
// ......(省略)
}finally{
// ......(省略)
}
}
分享到:
相关推荐
SSH整合技术是指将Struts、Hibernate和Spring三个开源框架集成在一起,用于构建高效、稳定的企业级Java应用。这种集成能够实现MVC模式的完美结合,...理解并熟练掌握这些知识点对于任何Java开发者来说都是至关重要的。
为了更好地理解上述示例中为什么不会如预期那样自动提交事务,我们可以通过查看Hibernate的源码来深入了解其内部机制。具体来说,可以分析`session.beginTransaction()`方法的实现: 1. **`session.begin...
本文档旨在提供一个关于SSH(Struts + Spring + Hibernate)集成框架的简易示例,适合初学者快速理解如何将这三种技术结合在一起,构建一个简单的Web应用。该示例通过Eclipse + MyEclipse集成开发环境进行演示,展示...
在Spring框架中,`HibernateTemplate`是一个非常重要的组件,它为开发者提供了与Hibernate持久化库交互的便捷方式。然而,正如描述中所指出...同时,理解这些底层的工作原理对于避免潜在的问题和提高代码质量至关重要。
为了更好地理解分页算法在整个系统中的作用,我们先来了解这些层次的具体职责: - **DAO层**:负责数据访问操作,如增删改查等。 - **DAOImpl层**:实现DAO层接口的具体逻辑。 - **Service层**:封装业务逻辑,提供...
Spring还支持使用回调机制(如HibernateCallback)处理特殊查询和分页。 Hibernate的核心在于对象关系映射,它允许我们将Java对象直接映射到数据库表。开发者需要正确配置实体类(Entity)和数据访问对象(DAO),...
值得注意的是,Hibernate 4.1.6版本不再包含`HibernateTemplate`、`HibernateCallback`以及`HibernateDaoSupport`等类。这些类在旧版本中用于简化数据库操作,但在新版本中,开发者需要进行相应的替换。例如,可以...
### HibernateTemplate 分组统计知识点详解 #### 一、概述 在Java Web开发中,尤其是在使用...这不仅有助于更好地理解和掌握Spring与Hibernate的集成方式,同时也为解决实际项目中的复杂数据处理问题提供了有效途径。
首先,我们需要理解类路径的概念。类路径是Java运行时寻找类和其他资源的路径,它包括工程的`src`目录以及Tomcat服务器的`bin`目录。在进行框架整合时,确保正确的类路径设置是非常关键的,因为它决定了框架组件的...
另一种格式(第10-16行)展示了如何在一个匿名内部类中使用`HibernateCallback`接口执行删除操作,这种方式在处理更复杂的逻辑时更为灵活。 3. **HQL单表查询**: HQL可以轻松地执行针对单个表的查询。第19行的HQL...
如示例所示,通过`getHibernateTemplate().execute()`方法传递一个`HibernateCallback`,然后在回调方法中创建并执行`CallableStatement`。这使得在Java应用程序中直接调用数据库的存储过程成为可能,提高性能并简化...
`UserDaoImpl`类继承自`HibernateDaoSupport`,并实现了`getName(String id)`方法,通过Hibernate的`HibernateCallback`接口来执行SQL查询。 通过以上步骤,我们成功地在Eclipse环境中构建了一个整合Struts、...
- **传统JSP + Servlet**:适合小型项目或对性能要求不高的场景,实现简单且易于理解。 在实际开发过程中,选择合适的分页方案需要根据项目的具体需求和技术栈来进行权衡。同时,还需要考虑数据库性能、服务器资源...
- **Hibernate**:Spring通过HibernateTemplate和HibernateCallback接口,提供了对Hibernate的集成,使得我们可以利用Spring的DI和AOP来管理SessionFactory和Session。 - **MyBatis**:Spring支持MyBatis的...
此外,Spring还提供了HibernateTemplate和HibernateCallback接口,使得事务管理变得更加简单。在`applicationContext.xml`中,我们需要配置Hibernate的相关bean,如SessionFactory、DataSource等。 对于Struts和...
### 分页概念理解 分页是在大量数据集中按需展示特定部分数据的一种方式,避免一次性加载全部数据导致的性能问题或用户界面响应缓慢。在Web开发中,通过设置每页显示的记录数量和用户可以导航的页码,实现数据的...
在`queryForPage`方法中,通过`HibernateTemplate`的`executeFind`方法,我们可以传递一个`HibernateCallback`实例,该回调内部创建`Query`对象并设置分页参数`setFirstResult`和`setMaxResults`。`getAllRowCount`...
### 一、理解分页的基本原理 分页的本质是将数据集分为多个子集(或页面),每个子集包含固定数量的数据项。用户可以通过翻页来查看不同子集中的数据,而不是一次性加载整个数据集。这不仅可以减少服务器的压力,还...
2. **ORM集成**:Spring通过`HibernateTemplate`和`HibernateCallback`支持Hibernate,简化了事务管理和对象关系映射。同样,对于MyBatis,Spring提供`SqlSessionFactoryBean`和`SqlSessionTemplate`来整合MyBatis,...
在Java编程语言中,泛型是一种强大的特性,它允许我们在编写代码时指定类型参数,从而提高了代码的灵活性和可重用性。本文将深入探讨如何在Java中定义泛型类...理解并熟练运用泛型是成为高效Java开发者的必备技能之一。