2.2-缓存机制+SqlSession事务操作:基于 `SqlSession` 的事务手动管理机制
保证数据库操作原子性、维护数据一致性的核心基础一、概述MyBatis 自身的事务控制无需依赖外部框架如 Spring全程以SqlSessionSQL 会话对象为核心载体所有事务相关操作都围绕该对象展开其中commit()事务手动提交和rollback()事务手动回滚是该机制的两个核心方法用于收尾事务流程确保多步增、删、改操作的原子性要么全部成功持久化要么全部失败回滚到原始状态MyBatis默认采用手动事务模式autoCommitfalse二、commit()与rollback()commit()事务手动提交方法核心作用将当前SqlSession事务中所有已执行但未生效的增、删、改操作永久同步到数据库中完成事务的正常收尾事务结束后SqlSession会自动开启新的事务核心特性依赖默认配置默认autoCommitfalse增删改操作执行后仅缓存结果不会自动生效必须手动调用此方法才能持久化缓存联动无参commit()等价于commit(true)会先刷新 MyBatis 一级、二级缓存再提交事务保证缓存与数据库数据一致原子性保障同一个SqlSession中的多步操作调用commit()会全部生效不存在 “部分操作持久化” 的情况rollback()事务手动回滚方法核心作用当事务执行出现异常SQL 执行异常、业务逻辑异常等时撤销当前SqlSession事务中所有未提交的操作将数据库状态恢复到事务开始前的原始状态避免数据错乱核心特性有效范围限制仅对 “未调用commit()” 的未完成事务有效已提交的事务无法回滚异常场景专属通常在try-catch的catch块中调用是保证数据一致性的关键兜底操作简化使用日常开发中无参rollback()即可满足大部分需求无需额外配置复杂回滚规则三、延伸MyBatis 事务的两种模式手动事务模式默认autoCommitfalse需手动调用commit()/rollback()适用于多步操作需保证原子性的场景如转账扣款 到账需同时成功或失败自动事务模式获取SqlSession时指定openSession(true)开启autoCommittrue每一条增删改 SQL 执行后自动提交仅适用于单步独立操作无法保证多步操作原子性SqlSession关闭的隐含行为当调用sqlSession.close()释放资源时若存在未提交的事务MyBatis 会自动执行rollback()撤销所有未持久化的操作避免残留无效缓存事务的适用范围限制仅对「增、删、改操作insert、update、delete」有效select查询操作不修改数据库数据不受事务控制无需提交或回滚与 Spring 整合后的变化实际项目中MyBatis 通常与 Spring 整合事务管理会被 Spring 接管核心是Transactional注解无需手动调用commit()/rollback()Spring 会根据执行结果自动完成事务收尾四、核心价值保证数据一致性避免多步操作中 “部分成功、部分失败” 导致的数据错乱符合业务逻辑完整性要求灵活控制事务流程无需依赖外部框架即可完成基础事务管理适配简单项目的开发需求为框架整合打基础理解 MyBatis 原生事务机制能更好地掌握其与 Spring 事务的整合逻辑提升复杂项目开发规范性总结核心知识点MyBatis 基于SqlSession的事务手动管理机制核心前提默认autoCommitfalse手动事务模式核心方法commit()持久化操作、rollback()撤销未提交操作核心价值保证数据库操作原子性维护数据一致性
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2409993.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!