携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
事务(Transaction)控制单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
1.创建项目
2.## applicationContext.xml配置事务
<!--事务管理器-->
<bean id="transationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataScource"/>
</bean>
3.创建EmployeeDao
package com.imooc.dao;
import com.imooc.entity.Employee;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmployeeDao {
//引入jdbcTemplate
public JdbcTemplate jdbcTemplate;
//创建get
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
//创建set
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//写入数据
public void insert(Employee employee) {
String sql = "insert into employee (eno,ename,salary,dname,hiredate) values (?,?,?,?,?)";
int num = jdbcTemplate.update(sql, new Object[]{employee.getEno(), employee.getEname(), employee.getSalary(), employee.getDname(), employee.getHiredate()});
System.out.println(num);
}
}
4.applicationContext.xml新增配置bean
<bean id="employeeService" class="com.imooc.service.EmployeeService">
<property name="employeeDao" ref="employeeDao"/>
<!-- 注入 transationManager 对象-->
<property name="transationManager" ref="transationManager"/>
</bean>
5.创建entity Employee
数据表有几个字段,就添加对应的属性,并且设置get和set方法
6.创建EmployeeService
package com.imooc.service;
import com.imooc.dao.EmployeeDao;
import com.imooc.entity.Employee;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.util.Date;
public class EmployeeService {
public EmployeeDao employeeDao;
//引入事务并且设置get和set方法
private DataSourceTransactionManager transationManager;
public DataSourceTransactionManager getTransationManager() {
return transationManager;
}
public void setTransationManager(DataSourceTransactionManager transationManager) {
this.transationManager = transationManager;
}
public EmployeeDao getEmployeeDao() {
return employeeDao;
}
public void setEmployeeDao(EmployeeDao employeeDao) {
this.employeeDao = employeeDao;
}
public void batchInsert(){
TransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = transationManager.getTransaction(definition);
try {
for(int i=0;i<10;i++){
if(i==3){
//模拟异常错误
throw new RuntimeException("错误");
}
Employee employee = new Employee();
employee.setEno(i+1);
employee.setEname("测试"+i);
employee.setSalary(500);
employee.setHiredate(new Date());
employee.setDname("dev");
employeeDao.insert(employee);
}
//事务成功,直接提交
transationManager.commit(status);
}catch (Exception e){
//产生错误,回滚
transationManager.rollback(status);
throw e;
}
}
}