一、编程式事物流程
编程式事物实现主要有两种方法,一种是使用TransactionTemplate,另一中就是使用PlatformTransactionManager.这里我主要介绍前者的使用方式。
1、 准备jdbc.properties配置数据库需要的信息,将配置属性注入com.mchange.v2.c3p0.ComboPooledDataSourc,
得到我们需要的数据源
2、 将DataSource数据源注入到org.springframework.orm.hibernate5.LocalSessionFactoryBean中
3、 将org.springframework.orm.hibernate5.LocalSessionFactoryBean注入到
org.springframework.orm.hibernate5.HibernateTransactionManager中,使用Spring管理事务
4、 将org.springframework.orm.hibernate5.HibernateTransactionManager注入到
org.springframework.transaction.support.TransactionTemplate中
5、 将org.springframework.orm.hibernate5.LocalSessionFactoryBean注入到DAO层
6、 将org.springframework.transaction.support.TransactionTemplate注入到Service层
两个与事务模板相关的类
TransactionCallBack<T>//如果方法执行没有返回值则覆写此类的方法
TransactionCallBackWithoutResult<T>//如果方法执行有返回值则覆写此类的方法
二、编程式事物例子
Student.java 使用注解的方式实现Object和数据库表的映射
package com.zbt;
import javax.persistence.*;
@Entity
@Table(name="stu")
public class Student {
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="address")
private String address;
@Column(name="phone")
private String phone;
//省略了getters 和 setters方法
上下文配置文件
第一步 :配置数据源
<!--使用c3p0配置 使用配置文件的方式需要指明配置文件的位置-->
<context:property-placeholder location="classpath:/jdbc.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
第二步:使用Spring注入org.springframework.orm.hibernate5.LocalSessionFactoryBean相关属性
<!--使用hibernateProperties + DataSource的方式取代hibernate.cfg.xml文件-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref=&#