起因 rhea项目有两个ut一直都是挂的,之前也经过几个同事排查过,但是都没有找到解决办法,慢慢的这个问题就搁置了.因为之前负责rhea项目的同事离职,我临时接手了这个项目,刚好最近来了一个新同事在做新的功能开发的时候遇到了这个问题,于是我就接了一个锅,最终证明这个锅很好玩. rhea是一个典型的使用mybatis orm的springboot项目,我们使用h2内存数据库做单元测试,每个单元测试都在一个事务内,都由Transactional进行注解.testGetBGWechatAccountB…
mybatis缓存.事务.插件的基础 一.缓存 (一)一级缓存与二级缓存 一级缓存 为了获得更好的性能,最重要的就是一级缓存.每个session对象维持一个一级缓存,session对象创建时缓存创建,session对象释放时缓存销毁. 缓存是一个哈希表.哈希表根据唯一键存储值,值可以根据唯一键检索.一个实体由它的ID唯一标识,如果两个实体类型相同,ID也相等,那么这两个实体是相等的. session对象从数据库中加载指定ID的实体,然后放到一级缓存中,访问该实体的键是它的ID值.当系统再次从数据…
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 41.spring的事务传播机制 42 .spring事务什么时候会失效 43 .什么的是bean的自动装配.有哪些方式? 44 .spring . springmvc .springboot的区别 45 .springmvc的工作流程 46 .Spring MVC的主要组件 47 .springboot自动配置原理 48 . 如何理解springboot的starter 49 . 什么是嵌入式服务器,为什么使用嵌入式…
一.事务传播性 1.1 什么是事务的传播性 事务的传播性一般在事务嵌套时候使用,比如在事务A里面调用了另外一个使用事务的方法,那么这俩个事务是各自作为独立的事务执行提交,还是内层的事务合并到外层的事务一块提交呢,这就是事务传播性要确定的问题.下面一一介绍比较常用的事务传播性. 首先奉上事务拦截器TransactionInterceptor事务处理流程图: 1.2 PROPAGATION_REQUIRED Spring默认的事务传播机制,如果外层有事务则当前事务加入到外层事务,一块提交一块回滚,如…
前言 前一篇文章<MyBatis5:MyBatis集成Spring事务管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事务的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事务处理.文章内容主要包含两方面: 1.单表多数据的事务处理 2.多库/多表多数据的事务处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事务管理,前面的文章建立了一个Student相关…
前一篇文章复习了MyBatis的基本使用以及使用Spring管理MyBatis的事务的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事务处理.文章内容主要包含两方面: 1.单表多数据的事务处理 2.多库/多表多数据的事务处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事务管理,前面的文章建立了一个Student相关表及类,这里再建立一个Teacher相关的表及类.第一步是建立一张Teach…
1 转义字符 字符 转义 描述 < < 小于 <= <= 小于等于 > > 大于 >= >= 大于等于 <> <> 不等于 & & ' &apos; " " 2 一级缓存以及二级缓存 学习Mybatis缓存的过程中,发现一篇美团的优秀文章: 聊聊MyBatis缓存机制. 此处对一级缓存以及二级缓存的使用进行总结. 2.1 一级缓存 2.1.1 小结 (1) MyBatis一级缓存的生命周期和…
一.MyBatis缓存 缓存可以提高系统性能,可以加快访问速度,减轻服务器压力,带来更好的用户体验.缓存用空间换时间,好的缓存是缓存命中率高的且数据量小的.缓存是一种非常重要的技术. 1.0.再次封装SqlSessionFactoryUtils 为了配置缓存的学习我们将工具类再次封装. 原SqlSessionFactoryUtil工具类如下: package com.zhangguo.mybatis03.utils; import org.apache.ibatis.session.SqlSes…
[原文]https://www.toutiao.com/i6594029178964673027/ 源码分析MyBatis缓存原理 1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然也在内部提供了相应的支持.通过在框架层面增加缓存功能,可减轻数据库的压力,同时又可以提升查询速度,可谓一举两得.MyBatis 缓存结构由一级缓存和二级缓存构成,这两级…
聊聊MyBatis缓存机制 2018年01月19日 作者: 凯伦 文章链接 18778字 38分钟阅读 前言 MyBatis是常见的Java数据库访问层框架.在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患.个人在业务开发中也处理过一些由于MyBatis缓存引发的开发问题,带着个人的兴趣,希望从应用及源码的角度为读者梳理MyBatis缓存机制. 本次分析中涉及到的代码和数据库表均放在GitHu…