m y ba ti s事物真的很好用哦

186 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情

前言

  • 数据库事物对于我们来说简直太友好了。没有他脏数据可能搞垮整个系统。数据库层面上的事物今天我们就不多说了。下面我们谈谈在m y ba ti s中是如何管理事务的。

  • JdbcTransaction:使用JDBC的事务管理机制,利用java.sql.Connection对象完成事务的提交。

  • ManagedTransaction:使用Managed的事务管理机制,mybatis自身不会去实现事务管理,而是让容器(JBOSS、WebLogic)实现对事务的管理。

  • SpringManagedTransaction:使用spring的事务管理机制,利用@Transaction注解即可实现

流程

  • TransactionSynchronization接口是Spring的事务扩展接口,是一个回调接口,用于在事务执行过程中的重要时间点执行额外的逻辑,

  • TransactionSynchronizationManager类:使用ThreadLocal管理当前事务的TransactionSynchronization集合

  • 从SqlSessionTemplate类创建JDK动态代理类开始,因为无论那种执行sql的方式,最终都会走此代码。

  • 进入getSqlSession方法 如果没有sqlsession,则通过sessionFacory创建sqlsession,然后执行registerSessionHolder注册sessionHolder。

从事务同步管理器中拿资源(sqlSessionHolder只把是Sqlsession包装了一层),从sessionHolder中拿sqlsesison。

  • 进入TransactionSynchronizationUtils方法进行回调一开始保存在synchronizations属性中的TransactionSynchronization实现类

比如mybaits一开始定义的SqlSessionSynchronization类

总结

  • 在m y ba ti s中为了应对我们的复杂的需求,mybatis为我们提供了事物的传播属性的控制。一共有7类来完成我们各个方法之间事物的管理统一,从而不会因为我们将业务抽离导致带来的事物失效或者错乱的情况
  • 上面提到了mybatis中封装的session. 在mybatis中中我们也可以将自动提交取消。这样我们手动来控制回滚。这样我们手动管理事物,也是可以有效避免掉方法调用带来的事物问题。总之事物将我们存储的数据作出一层隔离层来。这样方便我们任何时候对数据会退。