什么是事务
事务是指的是一个业务上的最小不可再分单元,通常一个事务对应了一个完整的业务,而一个完整的业务需要批量的DML语句共同联合完成。
事务的四大特性ACID
a:原子性:事务里的内容要么全部成功要么都不成功。c:一致性:事务前后数据的完整性保持一致,如:a给b转一千块,事务执行以后,a和b的钱总数是一样的。i:隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。d:持久性:事务结束,数据就持久化到数据库。不考虑隔离性会产生的3个问题
脏读:一个事务读到另一个事务未提交的数据。
不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致
幻读:在一个事务里面的操作中发现了未被操作的数据
解决办法:四种隔离级别
事务隔离级别:读未提交:事务未提交的数据可以读。什么问题都解决不了读已提交:读取已经提交了的数据,可以防脏读,不能防不可重复读和幻读。可重复读:读一个数据时,上锁。期间不让其他事务做删除修改操作串行化:直到一个事务的所有子事务全部结束才可以执行下一个事务。事务提交
Mybatis中的事务是通过sqlsession对象的commit方法和rollback方法实现事务的提交和回滚
走来走去提交和回滚都少不了connection,也就是原来jdbc的操作
我们在创建sqlsession中设置了提交的方式,所以导致每一次都需要commit
但是有着一个方法变成自动提交
只需要改一下就好了
我们在后面的操作就不需要进行提交操作了
这样你的@Test依然可以进行