就類似JdbcTemplate一樣,HibernateTemplate封裝了Hibernate存儲時的一些細節,例如try...catch的例外處理等等,HibernateTemplate的使用在觀念上與JdbcTemplate是類似的,這邊簡單的介紹一下HibernateTemplate的使用。
首先我們看一下Bean定義檔,這與前一個主題沒什麼太大的差別:
代碼:
xml 代码
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://localhost:3306/TestDB</value>
- </property>
- <property name="username">
- <value>caterpillar</value>
- </property>
- <property name="password">
- <value>123456</value>
- </property>
- </bean>
-
- <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean" destroy-method="close">
- <property name="dataSource">
- <ref bean="dataSource"/>
- </property>
- <property name="mappingResources">
- <list>
- <value>User.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- net.sf.hibernate.dialect.MySQLDialect
- </prop>
- <prop key="hibernate.show_sql">
- true
- </prop>
- </props>
- </property>
- </bean>
-
-
- <bean id="userDAO" class="onlyfun.caterpillar.UserDAO">
- <property name="sessionFactory">
- <ref bean="sessionFactory"/>
- </property>
- </bean>
- </beans>
在這邊UserDAO將繼承自HibernateDaoSupport類別,這可以幫我們省去一些管理sessionFactory、hibernateTemplate資源的工作,我們只要注入sessionFactory就好了,我們的DAO設計如下:
代碼:
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,例如:
代碼:
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 代码
- ....
- <bean id="myHibernateInterceptor"
- class="org.springframework.orm.hibernate.HibernateInterceptor">
- <property name="sessionFactory">
- <ref bean="mySessionFactory"/>
- </property>
- </bean>
-
- <bean id="myProductDaoTarget" class="product.ProductDaoImpl">
- <property name="sessionFactory">
- <ref bean="mySessionFactory"/>
- </property>
- </bean>
-
- <bean id="myProductDao" class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="proxyInterfaces">
- <value>product.ProductDao</value>
- </property>
- <property name="interceptorNames">
- <list>
- <value>myHibernateInterceptor</value>
- <value>myProductDaoTarget</value>
- </list>
- </property>
- </bean>
- ....
代碼:
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);
}
}
}
分享到:
相关推荐
标题中的"Spring_2000_Spring_Hibernate_HibernateTemplate"显然指的是一个关于Spring框架、Hibernate ORM框架以及其在2000年左右的版本或应用方式的专题。在这个主题下,我们将深入探讨Spring框架的核心特性,以及...
总结,Spring与Hibernate的整合是企业级开发中的重要技能,掌握HibernateTemplate的使用能够提高开发效率,减少错误。然而,随着技术的进步,开发者也应关注更现代的解决方案,如Spring Data JPA,以适应不断变化的...
本示例将深入探讨如何使用Spring将SessionFactory注入到HibernateTemplate中,从而实现数据库操作的便捷管理。 首先,让我们了解几个关键组件: 1. SessionFactory:这是Hibernate的核心工厂类,用于创建Session...
在Spring框架中,`HibernateTemplate`是一个非常重要的组件,它为开发者提供了与Hibernate持久化库交互的便捷方式。然而,正如描述中所指出的,直接使用`HibernateTemplate`进行事务管理并不总是最佳实践,尤其是在...
在Java企业级开发中,Spring和Hibernate是两个非常重要的框架,Spring作为一个全面的轻量级容器,负责管理对象的生命周期和依赖注入,而Hibernate则是一个强大的持久化框架,专门处理数据库操作。本教程将深入探讨...
HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...
在HibernateTemplate中,提供了多种常用的方法来实现数据访问操作(CRUD): 1. **`void delete(Object entity)`**:用于删除一个指定的对象实例。例如,如果要删除一个`Person`对象,可以直接调用此方法。 2. **`...
在Spring框架中,`HibernateTemplate`作为ORM(Object Relational Mapping)技术中的一个重要组件,它提供了简化Hibernate操作的方法集,使得开发人员能够更加便捷地进行数据库操作。通过使用`HibernateTemplate`,...
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`是Spring框架中用于操作Hibernate的一个便捷工具类,它极大地简化了Hibernate在实际应用中的集成与开发工作。通过`HibernateTemplate`,开发者可以非常方便地进行数据的增删改查等基本操作,而...
其中,`HibernateTemplate`作为Spring框架中的一个重要组件,为开发者提供了丰富的API来处理数据库操作,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的数据访问细节。 #### 二、HibernateTemplate简介 ...
《轻量级 J2EE 企业应用实战: Struts+Spring+Hibernate 整合开发》一书中详述了Spring与Hibernate的整合,其中一个重要组件就是HibernateTemplate。它为简化Hibernate在Spring框架中的使用提供了便利,减少了手动...
再者,Spring 2.0还包含了一个强大的数据访问层,支持JDBC、ORM框架(如Hibernate和JPA)以及模板类,如JdbcTemplate和HibernateTemplate。这些工具使得数据库操作更加便捷和安全,同时降低了与数据库交互的复杂性。...
Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...
Spring ORM(Object-Relational Mapping)是Spring框架的重要组成部分,它为开发者提供了在Java应用中集成各种ORM框架的统一接口。本文将深入探讨Spring ORM的核心概念、功能及其与主流ORM框架如Hibernate、JPA的...
而`HibernateTemplate`作为Spring框架对Hibernate的一种封装,更是进一步降低了开发难度,提高了开发效率。 #### 二、核心价值:专注业务逻辑 `HibernateTemplate`的主要价值在于让开发者能够将更多的精力聚焦于...
此外,Spring 2.0还加强了对JDBC的支持,引入了JdbcTemplate和HibernateTemplate,简化了数据库操作,减少了代码中的SQL硬编码。 "spring20英文.pdf"很可能是Spring 2.0的官方英文文档,包含了详细的框架介绍、API...
`HibernateTemplate`是Spring框架中的一个类,位于`org.springframework.orm.hibernate3`包下。它提供了一系列简化Hibernate数据访问操作的方法,并且能够自动将Hibernate异常转换为Spring的数据访问异常体系中的...
在Spring框架中集成Hibernate是一种常见的数据访问策略,它利用了Spring的强大依赖注入和事务管理功能,使得数据库操作变得更加简洁和高效。以下将详细介绍如何在Spring中配置和使用Hibernate。 首先,我们需要添加...
Spring作为一个全面的轻量级框架,提供了强大的依赖注入、AOP(面向切面编程)以及各种企业级服务,而Hibernate则是Java世界中流行的ORM解决方案,简化了数据库操作。将Spring与Hibernate集成,可以充分利用两者的...