前言: 分析了很多方面的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文件解析(一)

  1. 上述的加载方式是通过mybatis主配置文件中的mapper节点来进行解析加载的

  2. 注意: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源码学习指引目录的更多相关文章

  1. Spring mybatis源码篇章-sql mapper配置文件绑定mapper class类

    前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-MybatisDAO文件解析(二) 背景知识 MappedStatement是mybatis操作sql ...

  2. Spring mybatis源码篇章-MybatisDAO文件解析(一)

    前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-SqlSessionFactory 加载指定的mybatis主文件 Mybatis模板文件,其中的属性 ...

  3. Spring mybatis源码篇章-MapperScannerConfigurer关联dao接口

    前言:Spring针对Mybatis的XML方式的加载MappedStatement,通过引入MapperScannerConfigurer扫描类来关联相应的dao接口以供Service层调用.承接前 ...

  4. mybatis源码学习(一) 原生mybatis源码学习

    最近这一周,主要在学习mybatis相关的源码,所以记录一下吧,算是一点学习心得 个人觉得,mybatis的源码,大致可以分为两部分,一是原生的mybatis,二是和spring整合之后的mybati ...

  5. Spring mybatis源码篇章-Mybatis主文件加载

    通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-SqlSessionFactory 前话 本文承接前文的内容继续往下扩展,通过Spring与Mybatis的 ...

  6. mybatis源码学习:一级缓存和二级缓存分析

    目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCa ...

  7. mybatis源码学习:插件定义+执行流程责任链

    目录 一.自定义插件流程 二.测试插件 三.源码分析 1.inteceptor在Configuration中的注册 2.基于责任链的设计模式 3.基于动态代理的plugin 4.拦截方法的interc ...

  8. Spring mybatis源码篇章-MybatisDAO文件解析(二)

    前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-MybatisDAO文件解析(一) 默认加载mybatis主文件方式 XMLConfigBuilder ...

  9. Spring mybatis源码篇章-NodeHandler实现类具体解析保存Dynamic sql节点信息

    前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-XMLLanguageDriver解析sql包装为SqlSource SqlNode接口类 publi ...

随机推荐

  1. jsp的内置对象

    JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...

  2. SSH中后台传到前台一个信息集合,tr td中怎么进行排列,类似在一个div里排列书籍

    总觉得描述问题不对,这里详细说一下,就是把下面图片变成排列整齐,一行四个,多出来的两个排到下一行. 我问过群里的,给的答案都有些简介:1:后台排好了,前台循环出来: 2:前台直接循环,多出来的加< ...

  3. html日历(1)

    <html> <head> <link rel="stylesheet" type="text/css" href="S ...

  4. 从#65279字符看dede模板页面编码问题

    今天一位朋友让帮忙给解决一个dede模板的问题,问题主要是:模板文件生成html文件之后会在body开头处加入一个可见的控制符&#65279,导致页面头部会出现一个空白行. 接到"& ...

  5. ecshop_标签大全

    admin 后台功能 -------templates后台模板 data 上传文件.SQL备份文件.配置项 ------sqldata 数据库备份文件 ------config.php配置文件 inc ...

  6. Canvas DrawImage截取和压缩图片的陷阱

    html5的canvas十分之强大,可以做到快速的截取压缩出新的图片! 不过最近开发过程中遇到一个问题,图片压缩后使用toDataURL取得图片显示为一片漆黑,什么都没有! 折腾了很久,起初以为是上传 ...

  7. 遇到安装app不识别的情况

    一般->blokfile->证书设定设置

  8. Android-第二天(2)

    程序3 SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便 SimpleAdapter(Context context, List<? extends Ma ...

  9. PostgreSql 分页limit

    摘录自:http://jingyan.baidu.com/article/a17d528538119b8098c8f2ca.html 语法: select * from persons limit   ...

  10. 让自己写的项目支持Cocoapods管理

    学会使用别人的 Pods 依赖库以后, 你一定对创建自己的依赖库很有兴趣吧,现在我们一起来制作自己的Pods依赖库. 1.创建自己的 github 仓库 上图中标识出了6处地方 Repository ...