`
smallvq123
  • 浏览: 36846 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

用HibernateCallback与getSession的区别

阅读更多

转自 http://blog.sina.com.cn/s/blog_72b4c81f0100rjy8.html

1.this.getSession() 是org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一个方法,它可以从当前事务或者一个新的事务获得一个hibernate session,需要程序维护session(手动关闭session)
2.this.getHibernateTemplate().getSessionFactory().getCurrentSession()/openSession()则从spring中获取session
getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。
采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭
3.通过new HibernateCallback(){XXX}获得的session是当前线程中的session
4.hibernateTemplate会确保当前hibernate的session对象的正确打开和关闭,并直接参与到事物管理中去,template实例不仅是线程安全的同时也是可重用的
5.不提倡用getSession()来获得session实现,因为这样拿到的session是hibernate最原始的session不享 有spring提供的模板支持需要手动的关闭session,可以使用new HibernateCallback(){xxx}得到session
6.回调这个东西历史很久了。我的记忆中C的windows编程中就有了。
基本原理跟好莱坞原则一样,Don't call me,I'll call you.
编程上来说,一般使用一个库或类时,是你主动调用人家的API,这个叫Call,有的时候这样不能满足需要,需要你注册你自己的程序(比如一个对 象),然后让人家在合适的时候来调用你,这叫Callback。设计模式中的Observer就是例子。基于事件的编程方式,比如经典的VB、 Delphi里用的,那些事件的处理程序都是被调用的方法,都可成为回调(Callback)方法。
7.一个回调实现能够有效地在任何Hibernate数据访问中使用。HibernateTemplate 会确保当前Hibernate的 Session 对象的正确打开和关闭,并直接参与到事务管理中去。 Template实例不仅是线程安全的,同时它也是可重用的。因而他们可以作为外部对象的实例变量而被持有。对于那些简单的诸如find、load、 saveOrUpdate或者delete操作的调用,HibernateTemplate 提供可选择的快捷函数来替换这种回调的实现。不仅如此,Spring还提供了一个简便的 HibernateDaoSupport 基类,这个类提供了 setSessionFactory(..) 方法来接受一个 SessionFactory 对象,同时提供了 getSessionFactory() 和 getHibernateTemplate() 方法给子类使用。综合了这些,对于那些典型的业务需求,就有了一个非常简单的DAO实现

分享到:
评论

相关推荐

    HibernateCallback使用方法

    HibernateCallback 是 Spring 框架中与 Hibernate 整合的重要组件,通过它可以实现灵活的持久层访问。 在 Hibernate 中,SessionFactory 是一个非常重要的对象,它是单个数据库映射关系编译后的内存镜像。大部分...

    HibernateTemplate及generator用法.doc

    为了简化Hibernate与Spring的整合,Spring提供了`HibernateTemplate`类,它是一个封装了Hibernate Session的工具类,使得在处理数据库操作时更加方便。`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利...

    getHibernateTemplate

    与直接使用`getSession()`方法相比,`getHibernateTemplate()`具有以下显著特点: 1. **事务管理**:`getHibernateTemplate()`是Spring封装后的接口,它支持声明式事务管理。这意味着你无需手动开启和关闭事务,...

    hibernate执行原生sql语句

    在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在该方法中执行原生 SQL 语句,并使用 `Connection`...

    第24次课-1 Spring与Hibernate的整合

    Spring提供了DAO支持,可以简化DAO组件的开发,特别是IoC容器的使用,提供了DAO组件与业务逻辑组件之间的松耦合组合方式。 所有的DAO组件,都由容器负责注入到业务逻辑组件中,使用业务逻辑组件无需关心DAO组件的...

    spring+hibernate详解

    本文详细介绍了Spring与Hibernate集成的过程,包括如何配置`SessionFactory`、使用`HibernateTemplate`简化数据操作、通过`HibernateDaoSupport`提高代码可维护性以及利用`HibernateCallback`实现更复杂的业务逻辑。...

    SSH整合文档

    3. **使用HibernateCallback**: HibernateCallback是一个接口,可以在Session中执行回调方法,例如查询数据。 ```java HibernateCallback<List<Dept>> callback = new HibernateCallback<List<Dept>>() { @...

    HbernateTemplate的使用.pdf

    例如,在`PersonDAOHibernate`类中,我们看到如何使用HibernateTemplate执行常见的数据库操作。`getPersons()`方法通过调用`find()`获取所有`Person`对象,`getNews()`根据主键获取特定的`Person`,`savePerson()`...

    Hibernate3.6.10用到的jiar

    Hibernate3.6.10用到的jiar antlr-2.7.6.jar,commons-collections-3.1, commons-logging-1.1.3, dom4j-1.6.1, ejb3-persistence, hibernate-jpa-2.0-api-1.0.1.Final, hibernate3, javassist-3.12.0.GA, jta...

    常用的HQL语句!!!!

    这里的`setString(0, "小李想")`用于设置参数,`0`表示参数的位置,与`?`在HQL中的位置相对应。 2. **HQL删除**: 删除操作则是从数据库中移除特定的对象。例如,删除`PhUser`中userId为2的用户: ```java ...

    Spring整合Hibernate 详解.doc

    6.5.4 使用HibernateCallBack HibernateCallBack接口允许开发者在Hibernate操作的前后插入自定义的逻辑。通过实现这个接口,可以在执行特定数据库操作前后的回调函数中进行额外的工作,如事务控制、日志记录等。 ...

    Spring整合hibernate

    对于新项目,通常推荐使用SessionFactory.getCurrentSession(),因为它更简洁且与Spring的事务管理紧密结合。然而,对于已经使用HibernateTemplate的项目,如果没有明显的性能问题,可以继续使用,因为迁移到新的...

    HibernateTemplate类的使用

    需要注意的是,直接在`doInHibernate`方法中使用`Session`的事务管理方法可能会导致预期之外的结果,因为这些操作可能与`HibernateTemplate`的默认行为相冲突。 #### 六、Hibernate事务机制探究 为了更好地理解上述...

    SSH整合技术

    在`findByPage`方法中,使用HibernateCallback接口,通过`getHibernateTemplate().executeFind()`执行自定义的分页查询。例如: ```java @Repository public class CostDaoImpl extends HibernateDaoSupport ...

    hibernate+spring实现分页

    ### 使用Hibernate与Spring实现分页功能 #### 一、引言 在开发Web应用程序时,分页是一项常用的功能。它可以显著提升用户体验,并减轻服务器压力。本文将详细介绍如何结合使用Hibernate和Spring框架来实现数据的...

    ssh分页实现.

    这里使用了`HibernateCallback`接口,它允许在回调方法中执行原生的Hibernate操作,如设置分页参数`setFirstResult`和`setMaxResults`。 ### 四、PageBean类设计 为了封装分页信息,可以创建一个`PageBean`类,它...

    HibernateTemplate源代码

    #### 二、类结构与继承关系 `HibernateTemplate`类本身并没有直接继承自任何特定类,但它是Spring框架中众多DAO支持类之一。这些类通常用于处理数据访问异常以及资源管理等任务。`HibernateTemplate`主要依赖于`...

    Spring对DAO的支持.doc

    `PersonBean`包含了`id`, `name`, `age`等属性,`PersonDao`定义了与数据库交互的各种方法,而`PersonDaoImpl`则通过`Statement`和`ResultSet`进行实际的SQL操作。 ### 2. Spring对JDBC的DAO支持 Spring通过...

    struts2和spring整合

    通过合理配置和使用`SessionFactory`与`HibernateTemplate`等工具,开发者可以更专注于业务逻辑的实现,而无需过多关注底层细节。此外,这种整合方式也为后续引入更多高级特性(如事务管理、安全控制等)打下了坚实...

    HibernateTemplate汇总

    HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...

Global site tag (gtag.js) - Google Analytics