事务管理
一. JDBC事务管理
获取数据库连接conn
conn.setAutoCommit(false); // 开启事务
对数据库操作的代码块
conn.commit(); // 提交事务
二. Hibernate封装JDBC后事务管理
try { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); //在默认情况下,开启一个JDBC事物 for(int i=0; i<10; i++) { Student stu = new Student(); stu.setName("Student" + i); session.save(stu); } tx.commit(); //提交事务 session.close(); } catch(Exception e) {… tx.rollback(); //事务回滚 }
三. Spring事务管理机制
Spring提供的事务管理可以分为两类:编程式的和声明式的,编程式,其实就是在代码里面来控制,像Hibernate操作数据一样,开启事务,提交事务,这种方式有一定的局限性,所以我们一般是用声明式来配置我们的事务。
声明式事务的四种事务管理器:
1.Spring提供的JDBC事务
如果程序是使用JDBC做的持久化,使用该方式配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
2.Spring提供的Hibernate事务
如果程序是使用Hibernate做的持久化,使用该方式配置
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" />
</bean>
3.Spring提供的Java持久化API事务(JPA)
如果程序是使用JPA做的持久化,使用该方式配置
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
4.Spring提供的Java原生API事务
如果程序没有使用以上所述的事务管理,或者是跨越了多个事务管理源(比如两个或者是多个不同的数据源),则需要使用JtaTransactionManager
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager" />
</bean>