美文网首页
利用Transactional 记录删除操作,无论成功与否都要记

利用Transactional 记录删除操作,无论成功与否都要记

作者: yuaixing003 | 来源:发表于2023-11-13 10:22 被阅读0次

准备工作

1.创建数据库表 dept_log 日志表:

create table dept_log(

  id int auto_increment comment '主键ID' primary key,

    create_time datetime null comment '操作时间',

    description varchar(300) null comment '操作描述'

)comment '部门操作日志表';

2.引入实体类:DeptLog

@Data

@NoArgsConstructor

@AllArgsConstructor

public class DeptLog {

    private Integer id;

    private LocalDateTime createTime;

    private String description;

}

3.引入Mapper接口:DeptLogMapper

@Mapper

public interface DeptLogMapper {

    @Insert("insert into dept_log(create_time,description) values(#{createTime},#{description})")

    void insert(DeptLog log);

}

4.引入业务接口:DeptLogService

public interface DeptLogService {

    void insert(DeptLog deptLog);

}

5.引入业务实现类:DeptLogServiceImpl

@Service

public class DeptLogServiceImpl implements DeptLogService {

@Autowired

    private DeptLogMapper deptLogMapper;

@Transactional(propagation =Propagation.REQUIRES_NEW)

@Override

    public void insert(DeptLog deptLog) {

deptLogMapper.insert(deptLog);

}

}

代码实现:

业务实现类:DeptServiceImpl

@Slf4j

@Service

//@Transactional //当前业务实现类中的所有的方法,都添加了spring事务管理机制

public class DeptServiceImpl implements DeptService {

    @Autowired

    private DeptMapper deptMapper;

    @Autowired

    private EmpMapper empMapper;

    @Autowired

    private DeptLogService deptLogService;

    //根据部门id,删除部门信息及部门下的所有员工

    @Override

    @Log

    @Transactional(rollbackFor = Exception.class)

    public void delete(Integer id) throws Exception {

        try {

            //根据部门id删除部门信息

            deptMapper.deleteById(id);

            //模拟:异常

            if(true){

                throw new Exception("出现异常了~~~");

            }

            //删除部门下的所有员工信息

            empMapper.deleteByDeptId(id);

        }finally {

            //不论是否有异常,最终都要执行的代码:记录日志

            DeptLog deptLog = new DeptLog();

            deptLog.setCreateTime(LocalDateTime.now());

            deptLog.setDescription("执行了解散部门的操作,此时解散的是"+id+"号部门");

            //调用其他业务类中的方法

            deptLogService.insert(deptLog);

        }

    }

}

相关文章

  • 第三方接口绕过签名

    /** * 删除 * @param fileId */ @Transactional(rollbackFor = ...

  • 2019-06-10

    接的shareSDKQQ分享,无论成功与否 他会对剪切板操作俩次所以剪切板的changeCount会+2 微信分享...

  • 2019-03-25

    或许生命的意义在于无论上帝眷顾与否,你都要自己感动自己

  • 人生终归于平淡

    无论你身份高低 无论你成功与否 无论你善良邪恶 无论你幸福悲伤 人生终归于平淡

  • JPA问题整理

    delete删除执行不生效增加注解@Transactional 和@Modifying@Query(value =...

  • 2 - 基本CURD

    dao mapple.xml 测试 注意 插入、删除、修改要获取数据库中受影响的记录数,以便验证操作是否成功 插入...

  • Activity 跳转到MainActivity 并且切换到指定

    需求总是变化的,最近遇到一个奇怪的需求,Activity里跳转到微信支付页面,然后无论支付成功失败与否都要跳转到M...

  • 利用SHELL的PROMPT_COMMAND添加日志审计功能,实

    利用 PROMPT_COMMAND 实现命令审计功能: 记录什么用户,在什么时间,做了什么操作,然后将查到的信息记...

  • 六一儿童节

    无论精彩与否,无论成功失败,无论优秀良差!咱敢大胆地站上去就是精彩的成功的优秀的!开心就好……

  • 【考研日记】2016

    记录下自己的考研路,无论成功与否,这都是一段无与伦比的过程。 【2016.08.07】 今天几乎在宿舍睡了一上午,...

网友评论

      本文标题:利用Transactional 记录删除操作,无论成功与否都要记

      本文链接:https://www.haomeiwen.com/subject/yitdwdtx.html