`

Spring中的HibernateTemplate

阅读更多
就類似JdbcTemplate一樣,HibernateTemplate封裝了Hibernate存儲時的一些細節,例如try...catch的例外處理等等,HibernateTemplate的使用在觀念上與JdbcTemplate是類似的,這邊簡單的介紹一下HibernateTemplate的使用。

  首先我們看一下Bean定義檔,這與前一個主題沒什麼太大的差別:

 代碼:

xml 代码
 
xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">    
  3. <beans>    
  4.     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">    
  5.         <property name="driverClassName">    
  6.             <value>com.mysql.jdbc.Driver</value>    
  7.         </property>    
  8.         <property name="url">    
  9.             <value>jdbc:mysql://localhost:3306/TestDB</value>    
  10.         </property>    
  11.         <property name="username">    
  12.             <value>caterpillar</value>    
  13.         </property>    
  14.         <property name="password">    
  15.             <value>123456</value>    
  16.         </property>    
  17.     </bean>    
  18.        
  19.     <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" destroy-method="close">    
  20.         <property name="dataSource">    
  21.             <ref bean="dataSource"/>    
  22.         </property>    
  23.         <property name="mappingResources">    
  24.             <list>    
  25.                 <value>User.hbm.xml</value>    
  26.             </list>    
  27.         </property>    
  28.         <property name="hibernateProperties">    
  29.             <props>    
  30.                 <prop key="hibernate.dialect">    
  31.                     net.sf.hibernate.dialect.MySQLDialect    
  32.                 </prop>    
  33.                 <prop key="hibernate.show_sql">    
  34.                     true    
  35.                 </prop>    
  36.             </props>    
  37.         </property>    
  38.     </bean>    
  39.   
  40.   
  41.     <bean id="userDAO" class="onlyfun.caterpillar.UserDAO">    
  42.         <property name="sessionFactory">    
  43.             <ref bean="sessionFactory"/>    
  44.         </property>    
  45.     </bean>    
  46. </beans>  

  在這邊UserDAO將繼承自HibernateDaoSupport類別,這可以幫我們省去一些管理sessionFactory、hibernateTemplate資源的工作,我們只要注入sessionFactory就好了,我們的DAO設計如下:

 代碼:

UserDAO.java
package onlyfun.caterpillar; 

import net.sf.hibernate.*; 
import org.springframework.orm.hibernate.*; 
import org.springframework.orm.hibernate.support.*; 


public class UserDAO extends HibernateDaoSupport { 
    public void insertUser(final User user) { 
        getHibernateTemplate().execute(new HibernateCallback() { 
                public Object doInHibernate(Session session) throws HibernateException { 
                    session.saveOrUpdate(user); 
                    return null; 
                } 
            }); 
    } 
}

  只要注入sessionFactory,之後調用getHibernateTemplate()就可以取得HibernateTemplate的實例,我們利用callback方法,實作HibernateCallback介面,在doInHibernate()中進行存儲操作。

  對於簡單的存儲操作,我們甚至可以直接使用HibernateTemplate所提供的find()、load()、saveOrUpdate()、delete()等方法,而不用使用callback,例如:

 代碼:

UserDAO.java
package onlyfun.caterpillar; 

import org.springframework.orm.hibernate.support.*; 

public class UserDAO extends HibernateDaoSupport { 
    public void insertUser(User user) { 
        getHibernateTemplate().saveOrUpdate(user); 
    } 
}

  不用懷疑,程式就是如此簡單,所有的細節都被封裝起來了。

  HibernateTemplate中只能丟出unckecked例外,如果需要處理checked例外,則您可以使用AOP Interceptor來取代HibernateTemplate,從而取代callback方法,在參考手冊中有介紹如何配置,這邊複製過來以便參考:

 代碼:

xml 代码
  1. ....    
  2.     <bean id="myHibernateInterceptor"    
  3.         class="org.springframework.orm.hibernate.HibernateInterceptor">    
  4.         <property name="sessionFactory">    
  5.             <ref bean="mySessionFactory"/>    
  6.         </property>    
  7.     </bean>    
  8.   
  9.     <bean id="myProductDaoTarget" class="product.ProductDaoImpl">    
  10.         <property name="sessionFactory">    
  11.             <ref bean="mySessionFactory"/>    
  12.         </property>    
  13.     </bean>    
  14.   
  15.     <bean id="myProductDao" class="org.springframework.aop.framework.ProxyFactoryBean">    
  16.         <property name="proxyInterfaces">    
  17.             <value>product.ProductDao</value>    
  18.         </property>    
  19.         <property name="interceptorNames">    
  20.             <list>    
  21.                 <value>myHibernateInterceptor</value>    
  22.                 <value>myProductDaoTarget</value>    
  23.             </list>    
  24.         </property>    
  25.     </bean>    
  26. ....   

 代碼:

ProductDaoImpl.java
public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao { 

    public List loadProductsByCategory(final String category) throws MyException { 
        Session session = SessionFactoryUtils.getSession(getSessionFactory(), false); 
        try { 
            List result = session.find( 
                "from test.Product product where product.category=?", 
                category, Hibernate.STRING); 
            if (result == null) { 
                throw new MyException("invalid search result"); 
            } 
            return result; 
        } 
        catch (HibernateException ex) { 
            throw SessionFactoryUtils.convertHibernateAccessException(ex); 
        } 
    } 
}
分享到:
评论
1 楼 antonie1111 2008-08-26  
写的不是很仔细啊.

相关推荐

    Spring_2000_Spring_Hibernate_HibernateTemplate

    标题中的"Spring_2000_Spring_Hibernate_HibernateTemplate"显然指的是一个关于Spring框架、Hibernate ORM框架以及其在2000年左右的版本或应用方式的专题。在这个主题下,我们将深入探讨Spring框架的核心特性,以及...

    Spring_Spring_Hibernate_HibernateTemplate

    总结,Spring与Hibernate的整合是企业级开发中的重要技能,掌握HibernateTemplate的使用能够提高开发效率,减少错误。然而,随着技术的进步,开发者也应关注更现代的解决方案,如Spring Data JPA,以适应不断变化的...

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    本示例将深入探讨如何使用Spring将SessionFactory注入到HibernateTemplate中,从而实现数据库操作的便捷管理。 首先,让我们了解几个关键组件: 1. SessionFactory:这是Hibernate的核心工厂类,用于创建Session...

    spring hibernatetemplate

    在Spring框架中,`HibernateTemplate`是一个非常重要的组件,它为开发者提供了与Hibernate持久化库交互的便捷方式。然而,正如描述中所指出的,直接使用`HibernateTemplate`进行事务管理并不总是最佳实践,尤其是在...

    Spring整合hibernate(2)之基于HibernateTemplate的整合

    在Java企业级开发中,Spring和Hibernate是两个非常重要的框架,Spring作为一个全面的轻量级容器,负责管理对象的生命周期和依赖注入,而Hibernate则是一个强大的持久化框架,专门处理数据库操作。本教程将深入探讨...

    HibernateTemplate汇总

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

    HibernateTemplate的用法总结

    在HibernateTemplate中,提供了多种常用的方法来实现数据访问操作(CRUD): 1. **`void delete(Object entity)`**:用于删除一个指定的对象实例。例如,如果要删除一个`Person`对象,可以直接调用此方法。 2. **`...

    HibernateTemplate详细描述以及使用范围

    在Spring框架中,`HibernateTemplate`作为ORM(Object Relational Mapping)技术中的一个重要组件,它提供了简化Hibernate操作的方法集,使得开发人员能够更加便捷地进行数据库操作。通过使用`HibernateTemplate`,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...

    hibernateTemplate的常用方法

    `HibernateTemplate`是Spring框架中用于操作Hibernate的一个便捷工具类,它极大地简化了Hibernate在实际应用中的集成与开发工作。通过`HibernateTemplate`,开发者可以非常方便地进行数据的增删改查等基本操作,而...

    hibernateTemplate

    其中,`HibernateTemplate`作为Spring框架中的一个重要组件,为开发者提供了丰富的API来处理数据库操作,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的数据访问细节。 #### 二、HibernateTemplate简介 ...

    HibernateTemplate 的常规用法.doc

    《轻量级 J2EE 企业应用实战: Struts+Spring+Hibernate 整合开发》一书中详述了Spring与Hibernate的整合,其中一个重要组件就是HibernateTemplate。它为简化Hibernate在Spring框架中的使用提供了便利,减少了手动...

    spring2.0中文手册及使用指南 chm

    再者,Spring 2.0还包含了一个强大的数据访问层,支持JDBC、ORM框架(如Hibernate和JPA)以及模板类,如JdbcTemplate和HibernateTemplate。这些工具使得数据库操作更加便捷和安全,同时降低了与数据库交互的复杂性。...

    Spring+hibernate整合源代码

    Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...

    spring-orm.jar

    Spring ORM(Object-Relational Mapping)是Spring框架的重要组成部分,它为开发者提供了在Java应用中集成各种ORM框架的统一接口。本文将深入探讨Spring ORM的核心概念、功能及其与主流ORM框架如Hibernate、JPA的...

    关于使用HibernateTemplate

    而`HibernateTemplate`作为Spring框架对Hibernate的一种封装,更是进一步降低了开发难度,提高了开发效率。 #### 二、核心价值:专注业务逻辑 `HibernateTemplate`的主要价值在于让开发者能够将更多的精力聚焦于...

    Spring中英文资料

    此外,Spring 2.0还加强了对JDBC的支持,引入了JdbcTemplate和HibernateTemplate,简化了数据库操作,减少了代码中的SQL硬编码。 "spring20英文.pdf"很可能是Spring 2.0的官方英文文档,包含了详细的框架介绍、API...

    HibernateTemplate源代码

    `HibernateTemplate`是Spring框架中的一个类,位于`org.springframework.orm.hibernate3`包下。它提供了一系列简化Hibernate数据访问操作的方法,并且能够自动将Hibernate异常转换为Spring的数据访问异常体系中的...

    Spring中使用Hibernate

    在Spring框架中集成Hibernate是一种常见的数据访问策略,它利用了Spring的强大依赖注入和事务管理功能,使得数据库操作变得更加简洁和高效。以下将详细介绍如何在Spring中配置和使用Hibernate。 首先,我们需要添加...

    spring集成hibernate所需jar包

    Spring作为一个全面的轻量级框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种企业级服务,而Hibernate则是Java世界中流行的ORM解决方案,简化了数据库操作。将Spring与Hibernate集成,可以充分利用两者的...

Global site tag (gtag.js) - Google Analytics