`
ldzyz007
  • 浏览: 720013 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

为什么要使用HibernateCallback

阅读更多
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 使用方法 HibernateCallback 是 Hibernate 框架中的一种 callback 机制,允许开发者在持久层访问时执行自定义操作。HibernateCallback 是 Spring 框架中与 Hibernate 整合的重要组件,通过它可以...

    hibernate执行原生sql语句

    为什么需要执行原生 SQL 语句 在实际开发中,我们可能需要执行一些复杂的 SQL 查询,或者使用数据库特有的函数和语句,而这些操作在 HQL 中不支持。此时,我们需要使用原生 SQL 语句来实现这些操作。 使用 ...

    HibernateTemplate类的使用

    为了更好地理解上述示例中为什么不会如预期那样自动提交事务,我们可以通过查看Hibernate的源码来深入了解其内部机制。具体来说,可以分析`session.beginTransaction()`方法的实现: 1. **`session.begin...

    Spring整合Hibernate 详解.doc

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

    getHibernateTemplate

    5. **回调机制**:当`getHibernateTemplate()`的标准方法无法满足特定需求时,可以使用`HibernateCallback`接口进行自定义操作。这允许你在Hibernate的Session内部执行任意操作,同时仍然享受到Spring提供的事务和...

    HbernateTemplate的使用.pdf

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

    SSH整合技术

    在实现分页查询时,需要注意的是,要在HibernateCallback的`doInHibernate`方法中编写HQL语句或Criteria查询,通过Session创建Query对象,然后设置分页参数(如`setFirstResult`和`setMaxResults`),最后执行查询。...

    spring+hibernate详解

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

    Spring整合hibernate

    此外,HibernateTemplate会自动处理HibernateException,并将其转化为Spring的DataAccessException,这使得异常处理更加统一。 HibernateTemplate的主要优点是简化编码,但缺点是它是一个重量级的工具,可能会增加...

    使用Spring进行数据访问

    2. **ORM集成**:Spring通过`HibernateTemplate`和`HibernateCallback`支持Hibernate,简化了事务管理和对象关系映射。同样,对于MyBatis,Spring提供`SqlSessionFactoryBean`和`SqlSessionTemplate`来整合MyBatis,...

    SSH整合文档

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

    Hibernate学习笔记,使用Hibernate做数据层非常方便

    在Java开发中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它简化了数据库操作,将数据库中的表映射为Java对象,使得开发者可以像操作普通对象一样进行数据库操作。本笔记主要探讨如何使用...

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

    开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决了Spring封装Hibernate后灵活性不足的缺陷。 24.3 Spring对Hibernate的简化 24.3.4 HibernateTemplate的复杂用法 ...

    spring hibernatetemplate

    在本文中,我们将深入探讨`HibernateTemplate`的工作原理以及为什么在某些情况下应考虑使用`TransactionTemplate`。 `HibernateTemplate`的主要作用是简化Hibernate操作,它封装了SessionFactory、Session和Query等...

    HibernateTemplate的方法使用

    ### HibernateTemplate 的方法使用 #### 一、简介与配置方式 **HibernateTemplate** 是 Spring 框架中用于简化 Hibernate 使用的一个工具类。它通过 AOP(面向切面编程)的思想,封装了大量的 CRUD(创建、读取、...

    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...

    HibernateTemplate详细描述以及使用范围

    hibernateTemplate.execute(new HibernateCallback() { public Void doInHibernate(Session session) throws HibernateException, SQLException { session.save(new Person("王五", "123456789")); // 更多业务...

    HibernateTemplate源代码

    - **execute**:这是`HibernateTemplate`的核心方法,它执行由`HibernateCallback`接口定义的数据访问操作,并将Hibernate抛出的异常转换为Spring的数据访问异常。 ```java public <T> T execute...

    spring配置文件详解

    例如,在配置 Hibernate 模板时,我们使用了 HibernateCallback 对象来执行 Hibernate 操作。这使得我们的应用程序更加灵活和可维护。 Spring 配置文件是 Spring 框架中最重要的配置文件之一,负责定义和配置应用...

    struts2.3+spring3.1.2+hibernate4.1.6 配置说明

    值得注意的是,Hibernate 4.1.6版本不再包含`HibernateTemplate`、`HibernateCallback`以及`HibernateDaoSupport`等类。这些类在旧版本中用于简化数据库操作,但在新版本中,开发者需要进行相应的替换。例如,可以...

Global site tag (gtag.js) - Google Analytics