`

Hibernate中的模板回调机制

阅读更多

对于特定的数据访问对象或业务对象的方法来说,基本的模板编程模型看起来象下面所示的代码那样。对于这些外部对象来说,没有任何实现特定接口的要求,仅仅要求提供以个Hibernate SessionFactory. 它可以从任何地方得到,不过比较适宜的方法是从Spring的applicationcontext中得到的bean引用:通过简单的setSessionFactory(..)这个bean的setter方法。

<beans></beans>

  [beans]

   ...

   [bean id="myProductDao" class="product.ProductDaoImpl"]

        [property name="sessionFactory" ref="mySessionFactory"/] 

   [/bean]

 [/beans]

  <bean class="product.ProductDaoImpl" id="myProductDao"></bean>

     <property name="sessionFactory" ref="mySessionFactory"> </property>

 

 

public class ProductDaoImpl implements ProductDao{

    private SessionFactory  sessionFactory;

   public void setSessionFactory(SessionFactory sessionFactory){

             this.sessionFactory = sessionFactory;

   }

    public Collection loadProductsByCategory(final String category) throws DataAccessException {
        HibernateTemplate ht = new HibernateTemplate(this.sessionFactory);
        return (Collection) ht.execute(
                    new HibernateCallback() {
                                       public Object doInHibernate(Session session) throws HibernateException {
                                               Query query = session.createQuery("from test.Product product where product.category=?");
                                               query.setString(0, category);
                                                     return query.list();
                                       }
                     }
         );
    }

}

 

一个回调实现能够有效地在任何Hibernate数据访问中使用。HibernateTemplate 会确保当前Hibernate的 Session 对象的正确打开和关闭,并直接参与到事务管理中去。 Template实例不仅是线程安全的,同时它也是可重用的。因而他们可以作为外部对象的实例变量而被持有。对于那些简单的诸如find、load、saveOrUpdate或者delete操作的调用,HibernateTemplate 提供可选择的快捷函数来替换这种回调的实现。 不仅如此,Spring还提供了一个简便的 HibernateDaoSupport 基类,这个类提供了 setSessionFactory(..) 方法来接受一个 SessionFactory 对象,同时提供了 getSessionFactory() 和 getHibernateTemplate() 方法给子类使用。 综合了这些,对于那些典型的业务需求,就有了一个非常简单的DAO实现:

public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {

    public Collection loadProductsByCategory(String category) throws DataAccessException {
        return getHibernateTemplate().find(
            "from test.Product product where product.category=?", category);
    }
}

分享到:
评论

相关推荐

    深入浅出Hibernate中文版 part1

    5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的目录组织和基础设施 6.6 测试...

    深入浅出Hibernate中文版 part2

    5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的目录组织和基础设施 6.6 测试...

    Java支付宝网页端支付Demo

    - **回调验证**:在回调URL对应的Java方法中,你需要验证回调信息的合法性,包括签名、交易状态等,防止被恶意篡改。 - **更新订单状态**:如果验证成功,表示交易完成,此时可以在自己的系统中更新订单状态,例如...

    JAVA struts+hibernate实现的网络购物系统

    5. 支付模块:与第三方支付平台对接,处理支付请求,通常会涉及异步处理和回调通知。 6. 客服与评价模块:用户可以进行咨询、评价商品,这部分可能需要用到邮件服务、消息队列等技术。 **开发过程** 1. 设计数据库...

    Java相关课程系列笔记之十四Hibernate学习笔记.doc

    - **事件监听器**:允许开发者在特定事件发生时触发回调方法。 - **国际化**:支持多语言环境,便于全球化部署。 通过深入理解这些特性和使用方法,开发人员可以充分利用Hibernate的强大功能,构建出高性能、可扩展...

    Spring持久化模板总结

    4. **回调机制**:HibernateTemplate提供了doInHibernate()和doInTransaction()等方法,允许用户自定义回调函数,进行更复杂的数据库操作。 **JdbcDaoSupport和HibernateDaoSupport** 这两个类是Spring提供的一般...

    运用反射做的一个经典JDBC模板

    这里的`ResultSetHandler`是一个回调接口,用于处理查询结果。 3. 在实际使用时,根据业务需求,我们可以创建更多的DAO实现类,它们都继承自`JDBCTemplate`,并通过反射调用父类中的方法,以完成特定的数据库操作。...

    SSH的jar包大合集

    4. spring-jdbc:Spring的JDBC抽象层,简化了数据库操作,提供了模板方法和回调机制,避免了繁琐的JDBC代码。 5. spring-core:Spring的核心模块,提供了IoC容器和基本的工具类,是其他所有模块的基础。 接下来是...

    HibernateTemplate原理代码-模版设计模式

    // 回调 callback.doInHibernate(s); s.getTransaction().commit(); } catch (Exception e) { s.getTransaction().rollback(); } finally { s.close(); s = null; } } private Session getSession() { ...

    EJB3.0介绍

    ##### 2.4 可选的回调机制 EJB3.0允许开发者仅实现他们真正需要的回调方法。例如,使用`@PostConstruct`和`@PreDestroy`等注解来定义Bean初始化和销毁时的行为。这种灵活性使得开发者可以根据具体需求选择是否实现...

    srping中文reference

    这些内容对于处理数据库操作至关重要,Spring通过提供模板和回调机制简化了数据访问代码。 在"AOP和面向切面编程"章节中,读者可以了解Spring如何实现面向切面编程,包括定义切面、通知类型(前置、后置、环绕等)...

    一名初学者关于SSH整合的问题

    2. **spring-jdbc-4.0.2.RELEASE.jar**:Spring的JDBC抽象层,它简化了数据库访问,通过模板方法和回调机制减少了重复的JDBC代码。 3. **spring-core-4.0.2.RELEASE.jar**:Spring的核心模块,包含了IoC(控制反转...

    微信三级分销(java-SSH源码)

    在微信环境中,这通常需要集成微信开放平台API,实现用户授权、订单同步、支付回调等功能。此外,系统还需要设计合理的分销等级和佣金计算规则,激励用户参与分销。 这个项目中提供的源码可能涵盖了以上所有技术的...

    spring学习的第三天

    - 提供了丰富的查询方法,如`query`、`update`等,以及多种回调函数,如`PreparedStatementCreator`、`PreparedStatementSetter`、`ResultSetExtractor`、`RowMapper`等,方便不同场景下的使用。 - **使用方式**...

    spring-framework-2.5.4.zip

    2.5.4版本对JDBC、Hibernate、JPA等数据访问技术进行了集成优化,提供了模板类和回调机制,降低了与数据库交互的复杂性。 7. **Spring Web Services** Spring Web Services模块在2.5.4版本中也得到了强化,支持...

    SSH框架的增删改查

    例如,使用`$.ajax()`方法,设置URL为后台处理的Action,通过`success`回调处理返回的数据。 综上所述,SSH框架结合jQuery的AJAX,能够实现高效、用户体验良好的Web应用开发。通过熟练掌握这些技术,开发者可以快速...

    Java聚合支付源码

    3. **支付回调处理**:支付成功后,第三方支付平台会通过异步通知接口回调到商户服务器。这部分源码会包含处理回调信息的逻辑,确保交易的正确性,并更新订单状态。 4. **支付安全**:涉及到敏感信息的加密解密,如...

    java中三大框架和项目模拟面试题目[参考].pdf

    1. 拦截器基于Java反射,过滤器基于函数回调。 2. 过滤器依赖Servlet容器,拦截器独立。 3. 拦截器作用于Action请求,过滤器作用范围更广。 4. 拦截器可以访问Action上下文和值栈,过滤器则不能。 **使用Struts2...

Global site tag (gtag.js) - Google Analytics