仿写@Transaction 事务注解

2021-04-06 17:03:17 浏览数 (1)

最近公司项目在mysql mybatis 使用的时候事务不生效, 后来看了一下transcation 的源码 ,逐渐的剥开事物的面纱。底层也就是aop 环绕通知。我们先写utils ,这里就是先获取连接,用threadlocal 来存connection。

获取connection ,要先 把事务设置不自动提交。

不设置自动提交,

这里使用preparedStatement,是为了防止sql 注入

最后一定要记住,remove. 防止内存泄漏 。

在写一个自定义的注解,作用于类和方法上面。

下面在写一个aop 环绕通知实现以下。

这里说明一下@With , 是指作用在这个类下面的所有方法。

先判断类上面有没有事物的注解,类上面没有,在判断方法上面有没有事务的注解。没有事务出错了就不进行回滚。

下面就是写service,没有注解的时候

这时候应该一样能插入成功。

下面就是把其加入 springboot 容器里面。

这里我们看一下spring官网,使用注解模式。

里面指定要扫描的类

在写一个测试类,运行一下

我们把事务注解,打开, 再把这条记录删除,防止主键冲突。

再一次运行一下

数据库也没有插入成功。

好了。事物的原理,我们就搞清楚了。后续的功能大家就自己实现吧。

aop

0 人点赞