Mybatis源码: Builder Mapper Executor
生活随笔
收集整理的这篇文章主要介绍了
Mybatis源码: Builder Mapper Executor
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
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的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 基于机器学习的图像质量评价算法
- 下一篇: Mybatis源码:Cache 装饰器模