什么是 MyBatis?
引用Mybatis网站上的一句话
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如果说你对MyBatis基础的配置和定义完全不懂,那么可以点击这里进行学习。
框架是什么?框架的作用是什么?
我的理解是:框架是对底层代码的封装,更方便的让程序员去开发使用,Java中的持久层框架,都是对JDBC进行的封装。
Mybatis架构原理
我们来看一张图
接口层
接口层就是Mybatis提供给我们对数据库进行CRUD的一套API,通过SqlSession接口和Mapper映射文件,Mybatis就知道要执行哪一条SQL命令和需要的参数是什么。
public void save(){
InputStream in = Resources.getResourceAsStream("myBatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
//insert就是Mybatis提供给我们执行插入的方法
session.insert("save.test",1);
}
数据处理层
数据处理层是Mybatis内部来实现,完成对映射文件的解析和处理。
支撑层
支撑层主要是完成Mybatis与数据库的连接管理以及SQL命令与配置文件的对应,主要负责:
- Mybatis与数据库连接方式管理
- Mybatis对事物管理方式
- 配置文件加载
- Mybatis查询缓存管理
Mybatis架构流程以及层次结构
SqlSession
接收开发人员提供的StatementId和参数,并返回操作结果
Executor
执行器,是Mybatis调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler
封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数
ParameterHandler
负责对用户传递的参数转换成JDBC Statement所需要的参数
ResultSetHandler
负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler
负责java数据类型和JDBC数据类型之间的映射和转换
MappedStatement
维护了select、update、delete、insert节点的封装
SqlSource
负责根据用户传递的parameterObject,动态的生成SQL语句,将信息封装到BoundSql对象中,并返回生成的SQL语句以及相应的参数信息
Configuration
MyBatis所有的配置信息都维护在Configuration对象中
结语
好了,Mybatis就简单说到这里,下一篇就开始进行手写Mybatis,为了方便理解,我会从简易版一点一点升级,最后到源码篇。
文章如果误,请大佬们批评指正!