前言: 分析了很多方面的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. HDU 2639 Bone Collector II(01背包变形【第K大最优解】)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. [51nod1329]路径游戏

    Snuke与Sothe两个人在玩一个游戏.游戏在一个2*N的网格中进行(2行N列),这个网格中的2N个格子不是黑色就是白色.定义,一条有效路径是指一个完全由白色格子构成的序列,这个序列的第一个网格元素 ...

  3. Mybatis之基于XML的表之间映射

    数据库表之间的关系有3种,一对一.一对多.多对多.既然是ORM,这肯定是必须有的.在学习EF的时候也有涉及,今天就是参考着EF的来学习下MyBatis的表关系映射. 一.准备工作 1.准备Model和 ...

  4. JDBC连接数据库(查询)的步骤

    先导入jar包 代码: import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;impor ...

  5. 微信小程序 登录流程规范解读

    一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...

  6. [国嵌攻略][149][Yaffs2文件系统应用]

    嵌入式系统自启动 MTD技术通过把Nand FLash划分成bootloader分区,Linux kernel分区和file system分区来达到自启动的效果. 配置和编译内核 1.配置Linux内 ...

  7. javascript之fill()方法

    无意中看到fill这个方法,有些不解,起初以为是人家自定义的方法,后来才发觉原来不是,javascript里面是真的有这个方法,于是特地学习了下. fill()方法的作用是使用一个固定值来替换数组中的 ...

  8. vue 路由部署服务器子目录问题

    http://blog.csdn.net/hero82748274/article/details/73436497 <Egret 引擎入门> 这两天一直在查询vue经过打包后部署服务器一 ...

  9. 刚装上最新node,npm install报这个错误!求ndoe大神解答!!!

    npm -v和node-v都可以打印出来但是 npm install就报错! 解决方法:网络问题,建议使用cnpm install命令安装npm,再运行npm run dev 命令

  10. 没有选择上传的文件或选择的文件大小超出大小(DEDECMS亲身试验成功)

    dedecms升级到5.7后,后台上传压缩包文件,提示"没有选择上传的文件或选择的文件大小超出大小",由于很久都没弄这个系统了,所以最早怎么设置的也忘记了,就上百度搜,基本上有说的 ...