12干货!spring整合mybatis底层源码分析
核心代码
1.解析配置类上的@MapperScan(“com.liqi.mapper”)
@Import(MapperScannerRegistrar.class)
会调用MapperScannerRegistrar.registerBeanDefinitions
2. ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
scanner.doScan(StringUtils.toStringArray(basePackages));
拿到路径,扫描“com.liqi.mapper”路径
3.重新doScan方法,改变beanDefinition的beanClass属性
definition.setBeanClass(this.mapperFactoryBean.getClass());
4.MapperFactoryBean.getObject,获取mapper接口的代理对象返回。
以上就是整合mybatis的核心步骤。
spring整合mybaits一级缓存失效的问题
1.mybatis源码中将sqlSession放到了threadLocal中,执行sql,其实调用的是sqlSession.SelectOne()方法,这样同一是执行命令,直接从sqlSession中返回。
2.由于mybatis的sqlSession底层中没有加锁,线程是不安全的,spring整合mybatis的时候,获取sqlSession并发放到threadLocal中,所以每一个执行命令,都会获取不同的sqlSession,解决了安全问题,但同时一级缓存也失效了。
3.如何解决失效问题:加@Transactional注解,spring底层有判断,如果有这个注解,就会放到threadLocal里,但一般我们不用mybatis的一级缓存,例如我们的数据库隔离级别是读未提交,如果有一级缓存,数据库的隔离级别失效。
以上是我对spring整合mybatis的理解。
12干货!spring整合mybatis底层源码分析相关推荐
- 【mybatis源码】 mybatis底层源码分析
[mybatis源码] mybatis底层源码分析 1.测试用例 2.开撸源码 2.1 SqlSessionFactory对象的创建与获取 2.2 获取SqlSession对象 2.3 获取接口的代理 ...
- 视频教程-Spring底层源码分析-Java
Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- 集合底层源码分析之HashMap《上》(三)
集合底层源码分析之HashMap<上>(三) 前言 源码分析 HashMap主要属性及构造方法分析 tableSizeFor()方法源码分析 Node类源码分析 TreeNode类源码分析 ...
- Thinkphp底层源码分析
Thinkphp底层源码分析第一章 首先我们学习此章节的内容大家可能需要有一些基础才行,接着对PHP内置字符窜数组相关函数会用的比较多一点,当然不太熟悉的朋友,其实可以借助手册看下去.下面我们开始正题 ...
- Jaca集合(四)Vector集合底层源码分析
Vector的基本介绍: (1)Vector类的定义说明:我们进入源码界面进行查看: public class Vector<E>extends AbstractList<E> ...
- ArrayList底层源码分析
声明:本文为作者原创,请勿装载,如过转载,请注明转载地址 文章目录 ArrayList底层源码分析 1. 继承Serializable接口 2. 继承Cloneable接口 2.1 浅拷贝 2.2 深 ...
- eureka 之前的服务如何关闭_干货分享 | 服务注册中心Spring Cloud Eureka部分源码分析...
友情提示:全文13000多文字,预计阅读时间10-15分钟 Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题.当我 ...
最新文章
- springboot +security +mybatis+thymeleaf 实现简单的用户 角色 权限(资源) 管理
- Koa源码分析(二) -- co的实现
- 为 CefSharp 应用内置 C++ 运行环境并启用 AnyCPU 支持
- Anaconda安装库
- 性能测试培训: 监控CPU之python
- Java Web-网页基础-HTML-URL
- 大端机,小端机;截断与提升
- 再见,中关村“金三角”!
- Allegro PCB封装库(分类、命名很规范,已验证)
- 一分钟教会你固态硬盘数据恢复方法
- 如何编写android ANE
- 2019 面试系列 - 简历
- 人工智能时代,数据标注产业将迎来黄金时期?丨曼孚科技
- android教你打造独一无二的图片加载框架
- Mac下制作Linux Centos7启动盘
- quartus ii怎么生成pof和下载pof文件
- python棋牌游戏开发之斗地主
- 表单Form提交数据和PHP数据处理
- 俄罗斯套娃信封问题 转https://www.jianshu.com/p/9d9495ef4372
- docker网络的配置
热门文章
- 公网使用微软的RD Client访问内网下的windows主机
- [rospack] Warning: error while crawling /home/teabot: boost::filesystem::status: Permission denied:
- 多线程访问独立空间全局变量
- 中文名: 交通事故责任认定, 英文名称: Traffic accident responsibility identification...
- GWAS 质量控制(QC)分析流程
- 计算机平面设计专业年度工作计划,莆田职业学校计算机平面设计专业人才目标、规格、能力分析报告.doc...
- 学而思之判断文件是否存在路径是否正确
- 层净高怎么算_房屋的层高和净高怎么算?
- [Paper Reading-3d] AFDetV2: Real-Time Anchor-Free Single-Stage 3D Detection with IoU-Awareness
- [矿工]电信重组大格局,中国联通的攻守之道