从Mybatis源码到Spring动态数据源底层原理分析系列三、SqlSession

阅读: 评论:0

从Mybatis源码到Spring动态数据源底层原理分析系列三、SqlSession

从Mybatis源码到Spring动态数据源底层原理分析系列三、SqlSession

一、引入

在上篇文章中, 我们分析了Executor执行器的源码, Executor利用MappedStatement和参数通过一定的调度, 完成了sql参数的映射、sql的执行、结果集的处理, 即Executor就是将相关组件进行了调度而已

在执行sql之前, 我们分析得到, Executor会利用Transaction对象来获取连接, 然后利用这个连接去执行sql, 本篇文章我们就来分析下Transaction的功能以及SqlSession这个组件

二、事务相关组件分析

2.1、Environment的初始化

在第一篇文章中, 我们对Mybatis的初始化进行了简单的分析, 其中会对Mybatis的配置文件进行分析, 将里面的一个个标签映射成Java对象, 我们再来看看对<environments>标签的解析源码, 先贴上之前的配置文件:

<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="sql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://dev1-linux.pospal:3306/pospal?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true&amp;allowMultiQueries=true"/><property name="username" value="xxx"/><property name="password" value="xxx"/></dataSource></environment></environments><mappers><mapper resource="l"/></mappers>
</configuration>

可以看到, 我们配置了一个development环境, 在环境中配置了一个datasource数据源, 与此同时, 配置了一个事务管理器transactionManager, 那么这个是怎么映射到java对象的呢?

private void environmentsElement(XNode context) {if (context != null) {if (environment == null) {environment = StringAttribute("default");}for (XNode child : Children()) {String id = StringAttribute("id");if (isSpecifiedEnvironment(id)) {TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager"));DataSourceFactory dsFactory = d

本文发布于:2024-01-30 14:41:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170659686920735.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据源   底层   源码   原理   系列
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23