构建源码环境
github下载最新Mybatis源码 github地址
clone中输入github复制的地址,然后等待下载完成
整体架构
Mybatis整体架构如下
MyBatis 的整体架构分为三层:
- 基础支持层:对一些基础功能进行封装,为核心处理层提供服务
- 核心处理层:主要负责执行SQL,并返回结果
- 接口层:通SqlSession类提供对数据库访问能力,隐藏了后续复杂的处理逻辑
代码结构
Mybatis的代码结构非常工整,堪称完美的java编程规范教科书,当我们深入源码我们会发现,Mybatis的注释量相当少,那是因为基本上我们可以通过名称就能明白其中的含义
虽然看名字我们就能对整个模块有所了解,但这里还是简单一一简绍一下
设计模式说明
在Mybatis中使用了相当多的设计模式,我们可以通过阅读Mybatis源码来学习设计模式在代码中的应用
- SqlSession:门面模式
- 日志模块 :适配器模式
- 数据源模块:工厂模式
- 数据连接池:策略模式
- 缓存模块:装饰器模式
- Executor模块:模板方法模式
- Builder模块:建造者模式
- Mapper接口:代理模式
- 插件模块:责任链模式
…
执行流程
这里我们结合Mybatis源码汇总的示例代码进行分析
- 通过Resources读取mybatis配置文件 获取 Reader
- 通过 SqlSessionFactoryBuilder + Reader 构建 sqlSessionFactory
- 通过 sqlSessionFactory 获取 SqlSession
- 通过 SqlSession 获取 Mapper实例
- 执行Sql
- 关闭sqlSession
核心类
- SqlSessionFactoryBuilde:读取配置信息(XML文件),创建SqlSessionFactory,建造者模式,方法级别生命周期
- SqlSessionFactory:创建Sqlsession,工厂单例模式,存在于程序的整个应用程序生命周期
- SqlSession:代表一次数据库连接,可以直接发送SQL执行,也可以通过调用Mapper访问数据库;线程不安全,要保证线程独享,方法级生命周期;
- SQL Mapper:由一个Java接口和XML文件组成,包含了要执行的SQL语句和结果集映射规则。方法级别生命周期
源码调试
在Mybatis源码工程中就提供了类 AutoConstructorTest供我们调试,我们只需要修改 mybatis-config.xml中数据库的配置
然后执行单元测试即可,这里需要注意的是注释掉了每次都会执行的Sql脚本
这里需要注意的Sql脚本可能有一些问题需要手动执行,我的Mysql版本是8.0.16,其中定义的bit类型只能是输入0和1,但是插入脚本却是 1 2 3
如果报错可以自己改动一下相应的脚本,配置完成后执行运行一个单元测试试试
这里可以看到是没有任何问题的
源码下载
有需要后续可留言将本次源码上传至github供下载
参考
- Mybatis技术内幕
- https://xiaolyuh.blog.csdn.net/article/details/103290468