java编程中对事务的处理方式
来源:互联网 发布:淘宝超级店长有什么用 编辑:程序博客网 时间:2024/06/17 22:02
编程过程中经常遇到需要对数据库进行事务管理,下面就简单介绍一下经常使用的事务管理方式:
1、JDBC:JDBC通常的事务管理是通过setAutoCommit来进行的。简要代码如下:
//得到数据库连接conn
conn.setAutoCommit(false);//事务开始,设置非自动提交
prepareStatement或者Statement数据库操作,query,update等。
conn.commit();//事务提交
conn.setAutoCommit(true);
如果发生错误,要回滚处理conn.rollback();
2、Hibernate事务处理:
Session session =Configuration().configure().buildSessionFactory().openSession();
session.beginTransaction();
sesion.add(..);
session.getTransaction().commit();
session.close();
3、Spring-Hibernate进行事务处理:
(1)普通的代码方式:采用currentSession来进行。对一个表得到currentSession,操作完毕,不用关闭session,另一个表同样得到currentSession操作完毕。错误同样要进行rollback处理。
例如代码如下:
session =sessionFactory.getCurrentSession();//注意,这里我们使用了spring来帮我们管理事务,所以我们必须获取当前的session,而不是sessionFactory.openSession();
session.save(user);
LogManager logManger = new LogManager();
Log log = new Log();
log.setPath(path);
log.setName(name);
logManager.add(log);
错误的时候要进行:session.getCurrentSession.rollback()处理。
在LogManager类中add函数如下:
session =sessionFactory.getCurrentSession();//注意,这里我们使用了spring来帮我们管理事务,所以我们必须获取当前的session,而不是sessionFactory.openSession();
session.save(log);
(2)在 applicationContext.xml 中加入事务控制:
<!-- 引用Hibernate的事务管理器-->
<beanid="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"ref="sessionFactory"></property>
</bean>
<bean id="activeCertDAO"class="com.wapi.dao.ActiveCertDAO">
<propertyname="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="revokeCertDAO"class="com.wapi.dao.RevokeCertDAO">
<propertyname="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="certServiceImpl"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"ref="transactionManager"></property>
<property name="target">
<beanclass="com.wapi.serviceImpl.CertServiceImpl">
<property name="acDao">
<ref bean="activeCertDAO" />
</property>
<property name="revoDao">
<ref bean="revokeCertDAO" />
</property>
</bean>
</property>
<propertyname="transactionAttributes">