Spring mybatis源码学习指引目录
前言: 分析了很多方面的mybatis的源码以及与spring结合的源码,但是难免出现错综的现象,为了使源码陶冶更为有序化、清晰化,特作此随笔归纳下分析过的内容。博主也为mybatis官方提供过pull request,并被采纳。
名词解释
- service层关联:指的是业务层调用数据持久层即dao层的接口,其需要class的配合
- 注解模式加载:指的是插件通过解析class类中方法上的注解来完成注册dao层接口的组装,比如
@select/@update等注解 - mapper配置文件加载:指的是直接读取对应的xml格式mybatis文件,以此来创建数据操作对象
org.apache.ibatis.mapping.MappedStatement
数据库持久层会话对象SqlSessionFactory
通过调用org.mybatis.spring.SqlSessionFactoryBean类来创建mybatis对应的SqlSessionFactory,其中涉及mybatis xml模式的加载mapper文件。具体可查阅>>>Spring mybatis源码篇章-SqlSessionFactoryBean
xml模式的加载只会涉及到
org.apache.ibatis.mapping.MappedStatement的加载,其与service层的调用并没有建立关系,如何建立关系则需要继续往下查阅了
数据库SQL承载者MapperStatement
可以分为以下两种方式分析org.apache.ibatis.mapping.MappedStatement是如何被组装的
注解模式加载①
涉及到CRUD的注解模式,即调用org.apache.ibatis.builder.xml.XMLConfigBuilder进行解析的。具体的可查阅>>> Spring mybatis源码篇章-MybatisDAO文件解析(一)
上述的加载方式是通过mybatis主配置文件中的
mapper节点来进行解析加载的注意:mapper节点中的
resource/url属性加载的方式都是解析对应的xml格式文件,其并没有与service层建立关联;class属性加载则是通过注解模式的加载完成了与service层的关联
mapper配置文件加载②
直接解析对应的xml格式配置文件,具体可查阅>>>Spring mybatis源码篇章-MybatisDAO文件解析(二)
对上述的方式加载配置文件过程中,我们可以重点关注下其实如何解析
select/update/delete/insert标签的sql语句的
-${}或者#{}方式的解析区别可查阅>>>Mybatis源码解析-DynamicSqlSource和RawSqlSource的区别
-
-trim/foreach/if等语句节点的解析也可查阅>>>Spring mybatis源码篇章-NodeHandler实现类具体解析保存Dynamic sql节点信息
xml格式的加载mapper方式的模式,缺少了与service层的关联,mybatis也对此作了相应的处理,通过
org.mybatis.spring.mapper.MapperScannerConfigurer类来调配,具体可查阅>>>Spring mybatis源码篇章-sql mapper配置文件绑定mapper class类
Service层调用Dao层
最后我们也要关注下MVC模式中的Service层的接口如何调用DAO层的mapperStatement接口来完成对数据库的访问操作,此处可查阅>>>Mybatis源码分析-SqlSessionTemplate
小结
更多的内容可自行查阅官方源码或者官网文档,附上mybatis官网文档地址
Spring mybatis源码学习指引目录的更多相关文章
- Spring mybatis源码篇章-sql mapper配置文件绑定mapper class类
前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-MybatisDAO文件解析(二) 背景知识 MappedStatement是mybatis操作sql ...
- Spring mybatis源码篇章-MybatisDAO文件解析(一)
前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-SqlSessionFactory 加载指定的mybatis主文件 Mybatis模板文件,其中的属性 ...
- Spring mybatis源码篇章-MapperScannerConfigurer关联dao接口
前言:Spring针对Mybatis的XML方式的加载MappedStatement,通过引入MapperScannerConfigurer扫描类来关联相应的dao接口以供Service层调用.承接前 ...
- mybatis源码学习(一) 原生mybatis源码学习
最近这一周,主要在学习mybatis相关的源码,所以记录一下吧,算是一点学习心得 个人觉得,mybatis的源码,大致可以分为两部分,一是原生的mybatis,二是和spring整合之后的mybati ...
- Spring mybatis源码篇章-Mybatis主文件加载
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-SqlSessionFactory 前话 本文承接前文的内容继续往下扩展,通过Spring与Mybatis的 ...
- mybatis源码学习:一级缓存和二级缓存分析
目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCa ...
- mybatis源码学习:插件定义+执行流程责任链
目录 一.自定义插件流程 二.测试插件 三.源码分析 1.inteceptor在Configuration中的注册 2.基于责任链的设计模式 3.基于动态代理的plugin 4.拦截方法的interc ...
- Spring mybatis源码篇章-MybatisDAO文件解析(二)
前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-MybatisDAO文件解析(一) 默认加载mybatis主文件方式 XMLConfigBuilder ...
- Spring mybatis源码篇章-NodeHandler实现类具体解析保存Dynamic sql节点信息
前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-XMLLanguageDriver解析sql包装为SqlSource SqlNode接口类 publi ...
随机推荐
- HDU 1003 Max Sum【动态规划求最大子序列和详解 】
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 除了四大传统OA软件商,国内还有这些优秀的OA协同产品
国内OA 软件市场经过多年的发展,在产品.应用.服务方面都已相对成熟,也出现了众多优秀的OA软件品牌. 据中国软件协会2017年公布的数据显示:泛微OA.致远OA.华天动力OA.蓝凌OA的销售仍稳居O ...
- Java map 详解 - 用法、遍历、排序、常用API等
尊重原创: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 L ...
- Xmanager 远程到ubuntu失败
原因: 22端口没打开 SSH server服务没打开 解决办法: 打开22端口 如果没安装过防火墙:sudo apt-get install ufw ,sudo ufw enable 启动端口:su ...
- 使用notepad++作为keil的外部编辑器
之前一直不喜欢keil的编辑界面,但是又不想太浮夸.看到很多群里有人用vscode写stm32的序,但是直接用vscode编写的花,各种设置很麻烦.而且还不能调试.于是想到有没有一个轻便简约的外部编辑 ...
- ico图标在谷歌浏览器中如何显示?
http://www.zen-cart.cn/forum/topic266117.html 版主: shaning 发表回复 2 篇帖子 • 分页: 1 / 1 ico图标在谷歌浏览器中如何显示? ...
- [转]maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
源文URL:http://blog.csdn.net/caiwenfeng_for_23/article/details/44514947 mvn compile 没有问题,mvn package的 ...
- Docker问题: Layer already being pulled by another client. Waiting.什么原因
问题描述:Layer already being pulled by another client. Waiting. 问题分析:这是 1.8版本的一个bug,会在1.9版本中修复.http://st ...
- Java多线程异常处理
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Run ...
- Oracle database
//下面这个通常直选择TCP就好了 此处的全局数据库根据实际情况来确定,如果是第一次,要和第一次一致.(见上面的图中的全局数据库) //这个可以使 计算机名(计算机—>属性).也可以是ip地址 ...