by yan 20220302

以下为Activiti 构造 initSqlSessionFactory时,完成Mybatis 的 DefaultSqlSessionFactory的过程。

时序图


MyBatis解析xml配置文件
通过XMLConfigBuilder等一系列Builder类解析为Mapper对象模型

关键代码


//Configuration.javapublic Executor newExecutor(Transaction transaction, ExecutorType executorType) {executorType = executorType == null ? defaultExecutorType : executorType;executorType = executorType == null ? ExecutorType.SIMPLE : executorType;Executor executor;if (ExecutorType.BATCH == executorType) {executor = new BatchExecutor(this, transaction);} else if (ExecutorType.REUSE == executorType) {executor = new ReuseExecutor(this, transaction);} else {executor = new SimpleExecutor(this, transaction);}if (cacheEnabled) {executor = new CachingExecutor(executor);}executor = (Executor) interceptorChain.pluginAll(executor);return executor;}//DefaultSqlSessionFactory.java
//创建sqlSession: cfg->env->tx->excutor, cfg+excutor->sqlSessionprivate SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {Transaction tx = null;try {final Environment environment = configuration.getEnvironment();final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);final Executor executor = configuration.newExecutor(tx, execType);return new DefaultSqlSession(configuration, executor, autoCommit);} catch (Exception e) {closeTransaction(tx); // may have fetched a connection so lets call close()throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);} finally {ErrorContext.instance().reset();}}//XMLConfigBuilder.parseConfigurationprivate void parseConfiguration(XNode root) {try {//issue #117 read properties firstpropertiesElement(root.evalNode("properties"));Properties settings = settingsAsProperties(root.evalNode("settings"));loadCustomVfs(settings);loadCustomLogImpl(settings);typeAliasesElement(root.evalNode("typeAliases"));pluginElement(root.evalNode("plugins"));objectFactoryElement(root.evalNode("objectFactory"));objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));reflectorFactoryElement(root.evalNode("reflectorFactory"));settingsElement(settings);// read it after objectFactory and objectWrapperFactory issue #631environmentsElement(root.evalNode("environments"));databaseIdProviderElement(root.evalNode("databaseIdProvider"));typeHandlerElement(root.evalNode("typeHandlers"));mapperElement(root.evalNode("mappers"));} catch (Exception e) {throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);}}

相关类图

Mybatis xml mapper builder相关

Mybatis binding 相关

Mybatis mapping 相关

Mybatis Executor 相关

Mybatis cache相关

Mybatis源码: Builder Mapper Executor相关推荐

  1. mybatis源码解析 - mapper代理对象的生成

    1.简单示例 先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图: 完整代码地址:kingoe/boot-study:mapper层和我们平时说的dao ...

  2. Mybatis源码分析之-Executor

      mybatis的源代码相对于spring的来说简单了很多,对于初学者,可以先了解了mybatis的源码后再去了解spring的源码,本文主要来分析下Executor的内容 Executor介绍   ...

  3. Mybatis源码分析--Mapper接口的代理生成原理

    下面是mapper接口代理的生成逻辑 进入源码 进入getMapper看看 调用configuration的getMapper() 那么mapperRegistry是什么呢?我们看下 MapperRe ...

  4. MyBatis源码-深入理解MyBatis Executor的设计思想

    文章目录 Pre JDBC的执行过程 JDBC Demo JDBC Statement 接口 MyBatis执行过程 四大组件 组件之间的关系 Executor 执行器组件 架构总览 接口继承关系 P ...

  5. mybatis源码之执行insert代码分析

    系列文档: mybatis源码之创建SqlSessionFactory代码分析 mybatis源码之创建SqlSessionFactory代码分析 - mapper xml解析 mybatis源码之执 ...

  6. Mybatis源码基础解析

    Mybatis源码解析 mapper代理对象的生成,你有想过吗,我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建SqlSession,然后再创建获取mapp ...

  7. springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三)

    springboot集成mybatis源码分析-mybatis的mapper执行查询时的流程(三) 例: package com.example.demo.service;import com.exa ...

  8. MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)

    文章目录 Pre Executor 执行器 接口继承关系 BatchExecutor(重用执行器) 入门小demo 源码 BatchExecutor VS ReuseExecutor Pre MyBa ...

  9. MyBatis源码-解读Executor的三个实现类之SimpleExecutor(简单执行器)

    文章目录 Pre Executor 执行器 接口继承关系 SimpleExecutor(简单执行器) 入门小demo 实例化SimpleExecutor doQuery方法 Pre MyBatis源码 ...

  10. mybatis源码阅读(五) ---执行器Executor

    转载自  mybatis源码阅读(五) ---执行器Executor 1. Executor接口设计与类结构图 public interface Executor {ResultHandler NO_ ...

最新文章

  1. Jquery 常用方法经典总结
  2. 操作系统对性能的影响-MySQL适合的操作系统
  3. Windows Runtime (RT)
  4. aixs1 生成java代码_通过axis1.4 来生成java客户端代码
  5. falcon适配ldap密码同步
  6. 作者:石乾新(1989-),男,贵州大学公共管理学院硕士生。
  7. vs2017调试浏览器闪退
  8. 使用JSON的RESTful云数据库
  9. 中国塑料加工机械市场趋势报告、技术动态创新及市场预测
  10. [HTML/HTML5]3 页面结构
  11. 【浙江大学PAT真题练习乙级】1001 害死人不偿命的(3n+1)猜想(15分)真题解析
  12. ofbiz中用 ajax 几点注意
  13. Mysql数据库repair table 修复表
  14. MyBatisPlus关键字查询
  15. 3D数学 AABB(轴对齐矩形边界框)
  16. 竞品分析—抖音PK快手
  17. 【题解】UVa1665:Islands
  18. QQ音乐sign,jsvmp算法推导
  19. c语言中char类型转int类型
  20. 英语语法---连接词详解

热门文章

  1. C# 中对象与JSON字符串相互转换的三种方法
  2. 在OpenCV中将cv::Mat绘制到MFC的视图中
  3. json web token没有哪个成分_【分享项目】给你看看我们公司的登录认证是怎么做的?!(SpringBoot+Shiro+Token+Redis)...
  4. 排除网络故障课后习题参考答案
  5. java 读取sql xml文件是否存在_java.oracle問題,如下,我看到一个XML文件有一个SQL。...
  6. jdbc 生成建表语句_JDBC数据库连接怎么操作?
  7. vue-cli3中安装lib-flexible和px2rem
  8. lodop 小票排版_lodop+art-template实现web端漂亮的小票样式打印
  9. Android开发之自定义控件的基本介绍(附源码)
  10. Android开发之修改项目的仓库地址亲测有效