【Mybatis】【一】Mybatis源码解析-文章导读
1 前言
我们开始看数据库层面的一个框架,一个系统的根基就是数据了,那么跟数据库打交道的我们使用最多的就是Mybatis了,Mybatis-Plus又是基于Mybatis做的封装,就像SpringBoot基于Spring做的强大能力封装一样。
那么对于Mybatis的源码你又看过多少呢,在看之前我们先大概看看Mybatis都有些什么,知道是什么了,我们再看为什么、怎么去做。
中文官网:https://mybatis.org/mybatis-3/zh/index.html
源码下载:https://github.com/mybatis/mybatis-3/releases
英文官网:https://blog.mybatis.org/
版本:3.5.6
2 框架体系
2.1 功能结构图
功能结构图,也就是MyBatis大概都提供了哪些功能呢,我们来看下:
Mybatis的功能结构分为三层:
- API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
- 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
- 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
2.2 源码目录结构图
2.3 执行结构图
让我们了解下核心的类,辅助我们接下来更好的理解:
- SqlSessionFactoryBuilder: 配置类,SqlSessionFactoryBuilder根据数据流生成Configuration对象,看他的名字,用它来创建我们的核心SqlSessionFactory的;
- SqlSessionFactory: 维护我们的SqlSession的;
- SqlSession: 主要功能是完成一次数据库的访问和结果的映射,它类似于数据库的session概念,与数据库交互的会话,完成对数据库的CURD功能。
- Executor: MyBatis执行器,调度核心,负责Mybatis的SQL语句生成和查询缓存的维护;
- StatementHandler: 封装了JDBC statement操作,负责对JDBC statement操作,如设置参数,将结果映射成集合;
- ParameterHandler: 负责将用户传递的参数转换成JDBC statement所需的参数;
- TypeHandler: 负责将Java类型和JDBC类型之间的映射和转换;
- MappedStatement: MappedStatement对象对应Mapper.xml配置文件中的一个select/update/insert/delete节点,描述的就是一条SQL语句;
- SqlSource: 负责根据用户传递的parametreObject动态生成SQL,将信息封装到BoundSQL对象并返回;
- BoundSql: 标识动态生成的SQL语句以及相应的参数信息;
- Configuration: Mybatis中所有的配置信息都存储在此处。
大致的执行步骤:
1、读取配置文件: 其中包括数据库连接的相关信息;
2、通过读取的信息,创建SqlSessionFactory,它的生命周期是程序级的,程序运行时创建,项目结束时消亡;
3、使用SqlSessionFactory创建SqlSession,用于执行SQL语句;
4、调用Mybatis的statementHandler提供的API执行相应的SQL语句;
5、将执行完的SQL语句的存放在Map中;
6、执行SQL语句,将结果返回。
3 小结
好了,大概了解下主题框架,知道下Mybatis大概都有什么了,那我们开始进入正题,有理解错的地方,欢迎指正哈。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了