引言
在上一部分我们完成了解析XML配置的功能,这一部分呢就是把解析的SQL信息放到我们的JDBC中执行,也就是解析我们的数据源配置。这些数据源解析完成之后,就要创建我们的数据源的一个工厂,以及事务工厂进行一个处理。
开始
建立数据源连接池和 JDBC 事务工厂操作,并以 xml 配置数据源信息为入口,在 XMLConfigBuilder 中添加数据源解析和构建操作,向配置类configuration添加 JDBC 操作环境信息。以便在 DefaultSqlSession 完成对 JDBC 执行 SQL 的操作。
创建Transaction接口
定义标准的事务接口,连接、提交、回滚、关闭,由不同的事务方式进行实现。
创建JdbcTransaction以及其工厂类
在这个实现类中,我们实现了接口中的方法。
之后我们再通过对应的工厂进行创建。
在工厂的构造方法中包含 指定数据源,事物的隔离级别,以及是否自动提交
创建类型别名注册器TypeAliasRegistry
我们不难看出 它是使用一个map进行别名的存储,它在构造方法之中就已经将我们常用的基本数据类型进行注册了。
registerAlias("string", String.class); // 基本包装类型 registerAlias("byte", Byte.class); registerAlias("long", Long.class); registerAlias("short", Short.class); registerAlias("int", Integer.class); registerAlias("integer", Integer.class); registerAlias("double", Double.class); registerAlias("float", Float.class); registerAlias("boolean", Boolean.class);
这也就是我们在mybatis可以直接使用他们的原因。
那我们的JdbcTransaction是在哪里注册的呢?
在我们Configuration构造函数中。
解析数据源配置
在我们的XMLConfigBuilder中我们会通过environmentsElement方法解析我们的environments标签,
将这些内容导入到我们的Configuraion中进行存放。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3309/mybatis?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
使用数据源以及事务工厂
在我们openSession()之中会先创建一个事务工厂 在这个工厂里面我们会返回一个事务,就比如默认的JDBCTransaction
这个是我们获取连接的方法
Environment environment = configuration.getEnvironment();
Connection connection = environment.getDataSource().getConnection();
而正如我们上面的,这个JdbcTransaction中就有我们获取连接的方法。
@Override
public Connection getConnection() throws SQLException {
if (null != connection) {
return connection;
}
connection = dataSource.getConnection();
connection.setTransactionIsolation(level.getLevel());
connection.setAutoCommit(autoCommit);
return connection;
}
最后
关于对MyBatis源码的学习,参考了https://bugstack.cn/ 这个大佬的文章,我就是在这里学会的,同时这位大佬还分享了很多其他的知识,让我受益匪浅,大家可以点击去学习,十分感谢。
todo
延迟加载