我们故意在一个方法里先写一个插入,然后在写一个删除语句。其中删除语句的sql表达错误。
.
虽然会报错 告诉你删除的sql语句错误,但是不会告诉你 插入操作成功了。
也就是说 虽然程序因为错误没有运行完,但是有一部分操作还是成功了。
明显不满足我们的ACID原则(原子性、一致性、隔离性、持久性)
首先放上mybatis-spring的事务官方文档
http://mybatis.org/spring/zh/transactions.html
方式一、编程式事务(不推荐)
不推荐的原因是因为他是侵入式的,需要改变程序代码才能捕获异常。
使用try-catch进行捕获。
方式二、声明式事务(使用aop)
1.spring的事务传播机制
2.spring的事务隔离级别(巧记 脏不换)
第一个是数据库默认
第二个会出现:脏读、不可重复读、幻读
第三个会出现:不可重复读、幻读
第四个会出现:幻读
第五个全部都不会出现
(相比于数据库只多了一个 数据库默认 级别)
3.声明事务