spring+hibernate整和配置中声明式事物管理,事物代理配置策略.
<?xml version="1.0" encoding="gb2312"?>
<!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/spring</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>32147</value></property>
</bean>
<!--定义一个hibernate的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<list>
<!--以下用来列出所有的PO映射文件-->
<value>Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!--此处用来定义hibernate的SessionFactory的属性:不同数据库连接,启动时选择create,update,create-drop-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用-->
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!-- 配置事务拦截器-->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>personDao</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 此处可增加其他新的Interceptor -->
</list>
</property>
</bean>
<!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动生成事务代理-->
<bean id="personDao" class="lee.PersonDaoHibernate">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</beans>
测试代码
package lee;
import java.util.Collection;
import java.util.List;
import org.hibernate.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceUtils;
/**
* @author yeeku.H.lee kongyeeku@163.com
* @version 1.0
* <br>Copyright (C), 2005-2008, yeeku.H.Lee
* <br>This program is protected by copyright laws.
* <br>Program Name:
* <br>Date:
*/
//完全可以不需要MPersonDao接口,直接使用类,但这样是面向接口的编程。
public class PersonDaoHibernate extends HibernateDaoSupport implements PersonDao
{
/**
* 加载人实例
* @param id 需要加载的Person实例的主键值
* @return 返回加载的Person实例
*/
public Person get(int id)
{
return (Person)getHibernateTemplate().get(Person.class, new Integer(id));
}
/**
* 保存人实例
* @param person 需要保存的Person实例
*/
public void save(Person person)
{
getHibernateTemplate().save(person);
DataSource ds = null;
DataSourceUtils.getConnection(ds);
}
/**
* 修改Person实例
* @param person 需要修改的Person实例
*/
public void update(Person person)
{
getHibernateTemplate().update(person);
}
/**
* 删除Person实例
* @param id 需要删除的Person价id
*/
public void delete(int id)
{
getHibernateTemplate().delete(getHibernateTemplate().get(Person.class, new Integer(id)));
}
/**
* 删除Person实例
* @param person 需要删除的Person实例
*/
public void delete(Person person)
{
getHibernateTemplate().delete(person);
}
/**
* 根据用户名查找Person
* @param name 用户名
* @return 用户名对应的全部用户
*/
public List findByPerson(String name)
{
return getHibernateTemplate().find("from Person p where p.name like ?" , name);
}
/**
* 返回全部的Person实例
* @return 全部的Person实例
*/
public List findAllPerson()
{
return getHibernateTemplate().find("from Person ");
}
}
分享到:
相关推荐
你可以使用编程式事务管理,即在代码中显式调用 begin/commit/rollback 方法,或者使用声明式事务管理,通过 @Transactional 注解来标记事务边界。 3. **数据源配置**:配置数据源是整合的起点。你需要在 Spring ...
在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...
5. **事务配置**:Spring提供了声明式事务管理,可以在`applicationContext.xml`中配置。 6. **测试类**:如`hibernateTest`,通常会包含测试方法,检查整合是否正确,数据是否能正确存取。 在这个整合过程中,...
通过Spring的声明式事务管理,可以简化事务控制,减少代码中的错误。而Maven则保证了项目的构建一致性,方便进行版本管理和构建自动化。 总结来说,"Spring+Hibernate+SpringMVC+Maven整合"是现代Java Web开发中的...
- **事务管理**:Spring提供了声明式事务管理,简化了事务的处理。 - **模型-视图-控制器**:SpringMVC的MVC设计模式清晰分离了业务逻辑、数据模型和用户界面。 - **ORM支持**:Hibernate使得Java对象与数据库表之间...
2. **事务管理**:Spring提供声明式事务管理,通过`<tx:annotation-driven>`启用基于注解的事务管理,或在配置文件中手动配置事务规则。 3. **DAO层的实现**:Spring的`HibernateTemplate`或`HibernateOperations`...
本实例工程展示了如何在Spring 3和Hibernate 4中使用注解进行声明式事务管理,这是一种高效且易于维护的方法。接下来,我们将详细讨论相关知识点。 1. **Spring框架**:Spring是一个全面的后端开发框架,它提供了...
1. **事务管理**:Spring提供了一种声明式事务管理方式,只需在配置文件中声明事务边界,就可以在需要的地方自动进行事务管理。这样,开发者无需在每个数据库操作的方法中手动开始和结束事务,降低了代码的复杂性。 ...
Spring管理Hibernate SessionFactory,提供事务控制,并能通过声明式事务管理简化事务处理。此外,Spring还支持基于注解的Hibernate配置,使代码更加简洁。 Spring MVC与Ajax的结合则提高了用户体验。Ajax...
Spring通过其Transaction Management(事务管理)模块与Hibernate集成,能够提供声明式事务处理,这大大简化了事务控制的复杂性。 描述中的"spring+hibernate spring配置事务"强调了Spring在管理事务方面的关键角色...
- **@Transactional** 注解通常用于Spring的Service层,用于声明式事务管理,表示一个方法的执行是在事务上下文中完成的。 - **BaseDao** 是一个泛型的DAO实现,它提供基本的数据操作,如保存、删除、更新和查询等...
例如,对于支付场景,如果使用Spring,可以声明式地配置事务属性,确保`Bean1.update()`和`Bean2.save()`在同一个事务中执行,或者无论`Bean1.update()`的事务结果如何,都执行`Bean2.save()`的操作。这样极大地简化...
6. 事务管理:Spring 提供了声明式事务管理,可以在配置文件中声明事务边界,由Spring自动管理事务的开始、提交、回滚。 7. 整合测试:使用JUnit进行单元测试,可以测试单独的Service或DAO方法,也可以使用MockMVC...
Spring的IoC(控制反转)容器使得对象的创建和依赖关系的维护变得简单,通过配置文件可以声明式地管理这些对象。此外,Spring的AOP功能可以用来实现事务管理,确保数据的一致性。 Hibernate作为ORM(对象关系映射)...
- spring-tx:事务管理,支持编程式和声明式事务。 - spring-orm:集成ORM框架,包括Hibernate。 2. **Hibernate框架**: - hibernate-core:Hibernate的核心库,包括实体管理、查询API等。 - hibernate-...
3. **事务管理**:Spring支持声明式和编程式的事务管理,简化了事务边界定义。 4. **MVC(模型-视图-控制器)**:Spring MVC是Spring框架的一部分,提供了一个分离业务逻辑、数据展示和用户交互的架构模式。 **...
**Spring框架**是一个轻量级的开源框架,它支持多种功能,包括依赖注入、面向切面编程(AOP)、声明式事务管理等。Spring框架在业务逻辑层中发挥着重要作用,它能够帮助开发者管理业务对象,并提供资源管理等功能,...
声明式事务管理则是通过在配置文件中声明事务规则,使用 AOP 切面进行事务控制,适用于大部分情况,因为它可以实现事务的统一管理和隔离。 Spring 和 Hibernate 整合的关键步骤包括: 1. 添加 Spring 和 Hibernate ...
Spring与Hibernate集成,可以通过声明式事务管理来简化数据库操作的事务处理。 **Hibernate框架** Hibernate是一个对象关系映射(ORM)工具,它允许开发者用Java对象来操作数据库记录,而无需关心SQL语句。...