最近公司项目在mysql mybatis 使用的时候事务不生效, 后来看了一下transcation 的源码 ,逐渐的剥开事物的面纱。底层也就是aop 环绕通知。我们先写utils ,这里就是先获取连接,用threadlocal 来存connection。
获取connection ,要先 把事务设置不自动提交。
不设置自动提交,
这里使用preparedStatement,是为了防止sql 注入
最后一定要记住,remove. 防止内存泄漏 。
在写一个自定义的注解,作用于类和方法上面。
下面在写一个aop 环绕通知实现以下。
这里说明一下@With , 是指作用在这个类下面的所有方法。
先判断类上面有没有事物的注解,类上面没有,在判断方法上面有没有事务的注解。没有事务出错了就不进行回滚。
下面就是写service,没有注解的时候
这时候应该一样能插入成功。
下面就是把其加入 springboot 容器里面。
这里我们看一下spring官网,使用注解模式。
里面指定要扫描的类
在写一个测试类,运行一下
我们把事务注解,打开, 再把这条记录删除,防止主键冲突。
再一次运行一下
数据库也没有插入成功。
好了。事物的原理,我们就搞清楚了。后续的功能大家就自己实现吧。