前言: 分析了很多方面的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. 并查集-HDU1232-畅通工程

    转的其他人的.不知道谁的. 来看一个实例,杭电1232畅通工程 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的.最后要解决的是整幅图的连通性问题.比如随意 ...

  2. Shell菜单脚本

    今天在这儿给大家分享一个我简单编写的Shell菜单脚本,傻瓜式的人机交互,人人都可以操作linux. #!/bin/sh #Shell菜单演示 function menu () { cat <& ...

  3. 在 .NET中,一种更方便操作配置项的方法

    在应用程序的开发过程中,我们往往会为软件提供一些配置项,以允许软件根据配置项灵活来做事情,比如配置日志文件路径等,此外,我们还可以用配置项来为用户存储其偏好设置等. .NET 为我们默认提供了配置机制 ...

  4. ASP.NET没有魔法——ASP.NET MVC & 分层 代码篇

    上一篇文章对如何规范使用ASP.NET进行了介绍,本章内容将根据上一篇得出的结论来修改博客应用的代码. 代码分层 综合考虑将博客应用代码分为以下几个层次: ○ 模型:代表应用程序中的数据模型,与数据库 ...

  5. Django App(三) View+Template

    接着上一节(二)的内容,首先启动站点,通过界面添加Question和Choice两张表的数据,因为接下来,要向polls app里面添加views. 1.添加数据如下(这里是通过界面操作添加的数据) ...

  6. .31-浅析webpack源码之doResolve事件流(2)

    放个流程图: 这里也放一下request对象内容,这节完事后如下(把vue-cli的package.json也复制过来了): /* { context: { issuer: '', compiler: ...

  7. Spark性能调优之合理设置并行度

    Spark性能调优之合理设置并行度 1.Spark的并行度指的是什么?     spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!     当分配 ...

  8. Oracle_多行函数

      Oracle_多行函数   多行函数min(),max(),count(),sum(),avg() --1.1统计公司的最高工资,最低工资和总人数 --对于null值直接略过,不做运算 --max ...

  9. 网站地图怎么做?dedecms网站地图制作方法听语音

    网站地图怎么生成?下面分享织梦dedecms系统网站地图的生成方式,怎么制作网站地图,方法很简单.下面介绍一下网站地图优化方法及制作方法. 工具/原料 一个网站 方法/步骤 第一步 登录网站后台 第二 ...

  10. JAVA 一句话技巧

    1.拆分字符串 遇到特殊字符,比如:对‘$’符号,就应该使用‘\\$’,后总结可以加个方括号如 "[.]".2.遍历HASHMAP Iterator itr = map.keySe ...