在spring启动的时候,spring会根据我们配置的有关mapper.xml的路径加载此路径下的xml文件,得到一个List<Resource>的集合,然后将这个集合转化成Resource[]数组赋值到SqlSessionFactoryBean中的mapperLocations(其实也是一个Resource[])

带目前位置这些mapper的配置文件就被维护到一个SqlSessionFactoryBean中了,然后调用SqlSessionFactoryBean的getObject()方法通过buildSqlSessionFactory()方法创建一个SqlSessionFactoryBean实例,在调用buildSqlSessionFactory的时候,会创建一个XMLConfigBuilder对象然后获取一个configuration类型的对象,这个对象很关键,后面会用到,接着会对mapperLocations进行循环,然后使用XMLMapperBuilder对每个mapperLocations的流解析成document对象,接着会调用XMLMapperBuilder的parse()方法解析对document对象的每个结点并生成对象,当然在解些此resource的时候会判断configuration对象中是否已经有此resource,如果有就不解析如果没有才会解析,并将解析完的各个子结点放入到configuration中,其实就是放到不同的map集合中,而我们常见的insert,update等结点,会被维护到一个Map<String, MappedStatement> mappedStatements的map中,key就是namespace加上标签的id(例如:com.org.userMapper.selectOne之所以这样做是为了保证key的唯一性),value中存的MappedStatement对象其实就是对sql标签解析的结果,到这里mapper.xml就解析完成了,然后会将configuration作为参数通过DefaultSqlSessionFactory来创建一个sqlsessionFactory的实例对象,而对于解析失败的会进行循环处理处理,最后是通过namaspace维护到一个configuration中的一个类型为MapperRegistry对象中,而mapperRegistry

会调用addmapper方法把这个mapper维护到一个Map<Class<?>, MapperProxyFactory<?>> knownMappers = new HashMap()中,这个knownMappers 非常重要,他会在我们对接口进行调用的时候通过动态代理获取mapper接口实例,找到我们要找到的sql,当然在找到mapper实例之后还要经过一系列的参数处理器,sql处理器,然后选择合适的执行器,最后执行器将结果交给执行结果处理器处理返回给sqlsession。

动态代理的过程

通过接口的calss文件类型从knownMappers中获取一个mapper的代理工厂,在MapperProxyFactory代理工厂同调用newInstance()方法通过sqlsession实例和接口类型还有methodCach获取MapperProxy实例,然后再通过jdk动态代理来生成我们想要代理类

												

Mybatis的实现原理的更多相关文章

  1. Mybatis接口编程原理分析(三)

    前面两篇博客Mybatis接口编程原理分析(一)和Mybatis接口编程原理分析(二)我们介绍了MapperProxyFactory.MapperProxy和MapperMethod的操作及源码分析, ...

  2. Mybatis接口编程原理分析(二)

    在上一篇博客中 Mybatis接口编程原理分析(一)中我们介绍了MapperProxyFactory和MapperProxy,接下来我们要介绍的是MapperMethod MapperMethod:它 ...

  3. 深入理解Mybatis技术与原理

    目录 第1章 Mybatis简介 1.1 传统的JDBC编程 1.2 ORM模型 1.4 MyBatis 1.5 什么时候用MyBatis 第2章 MyBatis入门 2.2 MyBatis构成 2. ...

  4. mybatis(一、原理,一对多,多对一查询)

    MyBatis框架及原理分析 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 ...

  5. Mybatis之工作原理

    1.Mybatis的架构 1.1 Mybatis的框架分层 1.2 MyBatis的实现原理 mybatis底层还是采用原生jdbc来对数据库进行操作的,它支持定制化 SQL.存储过程以及高级映射的优 ...

  6. mybatis 插件的原理-责任链和动态代理的体现

    目录 1 拦截哪些方法 2 如何代理 3 代理对象 4 责任链设计模式 @ 如果没有自定义过拦截器, 可以看我前面的文章.如果不知道 JDK 动态代理怎么使用的, 可以看我这文章. 责任链设计模式理解 ...

  7. Mybatis简介与原理

    经常面试别人或者被面试,对Mybatis简介与原理这个问题的回答千差万别,为了更好的服务与以后,来个原理介绍. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 20 ...

  8. MyBatis整合Spring原理分析

    目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...

  9. 深入详解Mybatis的架构原理与6大核心流程

    MyBatis 是 Java 生态中非常著名的一款 ORM 框架,目前在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架. 如果你想要进入一线大厂,能够熟练使用 MyBatis 开发已经 ...

  10. MyBatis框架及原理分析

    MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 MyBatis的主要设计目的就 ...

随机推荐

  1. windows mysql绿色版配置Mysql5.7.X

    MySQL绿色版安装,很简单按照下面的方式很快就可以实现了. 1.下载地址 https://dev.mysql.com/downloads/mysql/ 百度网盘链接:https://pan.baid ...

  2. java的List中使用filter过滤出符合特定条件的元素List

    在实际开发中,经常需要把一个列表中的元素,按照特定条件过滤出来,放到一个新的列表中.本文给出了几个例子,来描述解决这个问题的方法. 我们假设有一个书的List,需要找出其中id分别是3.6.8.9的书 ...

  3. ThreadPoolExecutor 定制线程池参数

    在 java 开发中经常需要执行一些“规格化”的任务,此时可以使用 java 线程池.节省创建线程时间,任务来时即可执行,高效. java 包是 java.util.concurrent .创建线程池 ...

  4. 【转载】 漫谈Code Review的错误实践

    原文地址: https://www.cnblogs.com/chaosyang/p/code-review-wrong-practices.html ------------------------- ...

  5. ISO/IEC 9899:2011 条款6.9.1——函数定义

    6.9.1 函数定义 语法 1.function-definition: declaration-specifiers    declarator    declaration-listopt     ...

  6. 毫无PS痕迹 你的第一本Photoshop书 完整版

    毫无PS痕迹 你的第一本Photoshop书 目录 <毫无PS痕迹-你的本Photoshop书>全书分为四大部分: 第1.2章讲解色彩和图像的原理与基础知识要点. 第3至11章全面讲解了使 ...

  7. spring 加载属性(properties)文件

    在开发的过程中,配置文件往往就是那些属性(properties)文件,比如使用properties文件配置数据库文件,又如database-config.properties 代码清单:databas ...

  8. 改进初学者的PID-修改整定参数

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  9. 条件概率和链式法则 conditional probability & chain rule

    顾名思义, 条件概率指的是某个事件在给定其他条件时发生的概率, 这个非常符合人的认知:我们通常就是在已知一定的信息(条件)情况下, 去估计某个事件可能发生的概率. 概率论中,用 | 表示条件, 条件概 ...

  10. 迅速生成项目-react-static

    推荐指数: