
作者:小傅哥 博客:
管你吃几碗粉,有流量就行!
现在我们每天所接收的信息量越来越多,但很多的个人却没有多少分辨知识的能力。很多知识信息也只是蹭热点的泛知识,但泛知识只是一种空泛、不成系统、甚至可能是错误的信息群,不过就是这样的信息却给内容消费者一种“成功获取了知识”吃饱的幻觉,却丧失了对知识层次的把控。
而作为一个本身就很理科的程序员来说,如果都是被泛知识充斥,花费着自己的精力和时间,没有经过足够的脑力思考所吸收的泛技术内容,长期以往是很难有所成长的。
以为我个人的成长经历来看,我更愿意花很多的实际来解决一个问题,而不是一片问题。当一个问题解决的足够透彻、清晰、明确以后,再结合着这个知识点所需要的内容继续扩展和深挖。很庆幸当年没有那么多的泛知识内容推送,否则可能我也会被弄的很焦虑!
在上一章节我们解析 XML 中的 SQL 配置信息,并在代理对象调用 DefaultSqlSession 中进行获取和打印操作,从整个框架结构来看我们解决了对象的代理、Mapper的映射、SQL的初步解析,那么接下来就应该是连库和执行SQL语句并返回结果了。
那么这部分内容就会涉及到解析 XML 中关于 dataSource 数据源信息配置,并建立事务管理和连接池的启动和使用。并将这部分能力在 DefaultSqlSession 执行 SQL 语句时进行调用。但为了不至于在一个章节把整个工程撑大,这里我们会把重点放到解析配置、建立事务框架和引入 DRUID 连接池,以及初步完成 SQL 的执行和结果简单包装上。便于读者先熟悉整个框架结构,在后续章节再陆续迭代和完善框架细节。
建立数据源连接池和 JDBC 事务工厂操作,并以 xml 配置数据源信息为入口,在 XMLConfigBuilder 中添加数据源解析和构建操作,向配置类configuration添加 JDBC 操作环境信息。以便在 DefaultSqlSession 完成对 JDBC 执行 SQL 的操作。
源码地址:https://t.zsxq.com/bmqNFQ7
数据源的解析和使用核心类关系,如图 5-2 所示
一次数据库的操作应该具有事务管理能力,而不是通过 JDBC 获取链接后直接执行即可。还应该把控链接、提交、回滚和关闭的操作处理。所以这里我们结合 JDBC 的能力封装事务管理。
详见源码:cn.bugstack.mybatis.transaction.Transaction
详见源码:cn.bugstack.mybatis.transaction.jdbc.JdbcTransaction
详见源码:cn.bugstack.mybatis.transaction.TransactionFactory
在 Mybatis 框架中我们所需要的基本类型、数组类型以及自己定义的事务实现和事务工厂都需要注册到类型别名的注册器中进行管理,在我们需要使用的时候可以从注册器中获取到具体的对象类型,之后在进行实例化的方式进行使用。
详见源码:cn.bugstack.mybatis.type.TypeAliasRegistry
详见源码:cn.bugstack.mybatis.session.Configuration
通过在 XML 解析器 XMLConfigBuilder 中,扩展对环境信息的解析,我们这里把数据源、事务类内容称为操作 SQL 的环境。解析后把配置信息写入到 Configuration 配置项中,便于后续使用。
详见源码:cn.bugstack.mybatis.builder.xml.XMLConfigBuilder
在上一章节中在 DefaultSqlSession#selectOne 只是打印了 XML 中配置的 SQL 语句,现在把数据源的配置加载进来以后,就可以把 SQL 语句放到数据源中进行执行以及结果封装。
详见源码:cn.bugstack.mybatis.session.defaults.DefaultSqlSession
创建一个数据库名称为 mybatis 并在库中创建表 user 以及添加测试数据,如下:
测试结果
