事务概览
事务是一组操作
的集合,它是一个不可分割的工作单位。 事务会将所有的操作作为一个整体一起向系统提交或撤销操作请求,换句话说:这些操作要么同时成功、要么同时失败。
具体案例
我们先看一个需求:现在有两张数据库表:员工表emp
和员工工作经历表emp_expr
,现在需要完成新增一个员工的需求,我们需要在员工表中添加员工的基本信息
和在员工工作经历表中添加员工的工作经历
,这个业务操作就包含了两个操作,根据需求可以先写一个Service
方法:
/**
* 新增员工
* @param emp 员工实体对象
*/
@Override
public void addEmp(Emp emp) {
// 为新增员工补全属性
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
// 新增员工
empMapper.insertEmp(emp);
// 批量添加员工工作经历
Integer empId = emp.getId();
List<EmpExpr> exprList = emp.getExprList();
// CollectionUtils.isEmpty不但会检查集合是否为空,还会检查集合是否为null
if (!CollectionUtils.isEmpty(exprList)) {
exprList.forEach(empExpr -> empExpr.setEmpId(empId));
empExprMapper.insertBatch(exprList);
}
}
这个Service
中的方法先会给Emp员工实体对象补全信息,然后将这些信息添加到数据库表emp
中:
/**
* 新增员工
* @param emp 员工实体对象
*/
@Insert("insert into emp(username, name, gender, phone, job, salary, " +
"image, entry_date, dept_id, create_time,