当前位置: 首页 > web >正文

MyBatis 缓存与 Spring 事务相关笔记

一、MyBatis 缓存

  1. 缓存作用:减少对数据库的访问,提高查询效率。当进行两次相同的查询时,可直接使用缓存数据。
  2. 一级缓存
    • 默认开启
    • 级别:SQLSession 级别
    • 特点:必须是同一个 SQLSession 才会使用到缓存
  3. 二级缓存
    • 需要手动开启,使用<cache>标签启用
    • 级别:Mapper 级别
    • 特点:使用同一个 Mapper 查询同一个 SQL 且参数相同时,会击中缓存;二级缓存的数据需要可序列化

二、Spring 事务实现方式

  1. 编程式事务

    • 通过TransactionTemplate实现
    • 示例代码:
    @Autowired
    TransactionTemplate tt;@RequestMapping("testa")
    public void testTransaction(){tt.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus status) {try{// 业务操作// ...} catch (Exception e) {status.setRollbackOnly(); // 发生异常时回滚}}});
    }
    
  2. 声明式事务

    • 通过@Transactional注解实现
    • 示例代码:
    @RequestMapping("testb")
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.DEFAULT)
    public void testTransactionB(){// 业务操作// ...
    }
    

三、事务隔离级别

  • Isolation.DEFAULT:默认,跟随连接的数据库的隔离级别
  • 其他级别:读未提交、读已提交、可重复读、串行化

四、事务失效的情况

  1. 事务传播行为设置有问题(如nevernot_supported,以非事务方式运行)
  2. 数据库不支持事务(如使用 MyISAM 存储引擎的表)
  3. 方法的访问权限修饰符影响动态代理重写 / 调用此方法
  4. 在类的内部调用自身的方法(this调用,非动态代理对象)

五、Spring 事务传播行为(7 种)

  1. Propagation.REQUIRED(默认)
    • 若外部有事务,就加入事务;若外部没有事务,创建新事务独立运行
  2. Propagation.SUPPORTS(拥护)
    • 若已有事务,加入事务;若没有事务,以非事务处理
  3. Propagation.MANDATORY(强制的)
    • 若有事务,加入;若没有,抛出异常
  4. Propagation.REQUIRES_NEW(必须独立)
    • 若有事务,挂起当前事务,创建新事务;若没有,创建事务
  5. Propagation.NOT_SUPPORTED(不拥护)
    • 若有事务,挂起,当前方法以非事务方式运行;若没有,以非事务方式运行
  6. Propagation.NEVER(不能有事务)
    • 若有事务,抛出异常;若没有,以非事务方式运行
  7. Propagation.NESTED(嵌套)
    • 若有事务,嵌套事务运行;若没有,创建新事务
http://www.xdnf.cn/news/17791.html

相关文章:

  • 安路Anlogic FPGA下载器的驱动安装与测试教程
  • 扩展 Chat2File-deepseek V4.0 正式发布:不仅是更新,更是一次“重塑”
  • 实验-vlan实验
  • 8月12号打卡
  • 常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx运维指南
  • MySql——B树和B+树区别(innoDB引擎为什么把B+树作为默认的数据结构)
  • 什么是 DispatcherServlet?
  • GIT使用攻略
  • HTTP 协议详解:深入理解 Header 与 Body!
  • Windows 命令行:打开命令提示符界面
  • 正式出版!华东数交组编《数据资产化实践:路径、技术与平台构建》
  • 小程序排名优化:功能迭代如何助力排名攀升
  • 【电子硬件】EMI中无源晶振的优势
  • C++11新增关键字和范围for循环
  • SuperMap GIS基础产品FAQ集锦(20250804)
  • 项目实战2——LAMP_LNMP实践
  • C++学习之数据结构:AVL树
  • 学习笔记《区块链技术与应用》ETH 第二天 状态树
  • 云原生作业(nginx)
  • Neo4j Cypher语句
  • 【数据分享】2020-2022年我国乡镇的逐日最高气温数据(Shp/Excel格式)
  • Go 语言中的结构体、切片与映射:构建高效数据模型的基石
  • 超详细基于stm32hal库的esp8266WiFi模块驱动程序(可直接移植)
  • 嵌入式技术公开课精华笔记:CSDN专版
  • 如何将新建的Anaconda虚拟环境导入Juputer内核中?
  • C++11新增可变参数模板
  • 如何区分类的关系是关联和聚合?
  • 什么是 Spring MVC?
  • unity shader ——屏幕故障
  • Spring Boot项目通过RestTemplate调用三方接口详细教程