MyBatis-架构与原理

本文详细介绍了MyBatis的架构组成及其工作流程。从API接口层到基础支撑层,再到核心类如SqlSessionFactoryBuilder、SqlSessionFactory等的工作原理,以及如何进行SQL解析、执行和结果映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

架构图

在这里插入图片描述

API接口层

提供给外部使用的API,通过这些API来操作数据库

数据处理层

负责具体的SQL解析、查找、执行和结果映射,根据调用请求完成数据库操作。

基础支撑层

连接管理、事务管理、配置加载、缓存处理。

流程

在这里插入图片描述

  1. MyBatis的初始化从加载mybatis-config.xml文件开始,解析构造Configuration类
  2. 加载配置,将SQL的配置信息加载成一个个的MappedStatement对象,包括传入参数配置、执行的SQL、结果映射配置,存储在内存中
  3. SQL解析,当API接口接收调用参数时,会接收到传入的ID和传入对象(Map、JavaBean或基本类型),MyBatis会根据ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement解析,解析后得到最终要执行的SQL语句和参数
  4. SQL执行,将最终得到的SQL和参数拿到数据库进行执行,得到返回结果
  5. 结果映射,将操作数据库的结果映射的配置进行转化,可以转化成HashMap、Bean或基础数据类型,并返回结果。

MyBatis核心类

SqlSessionFactoryBuilder

每一个MyBatis应用的入口是SqlSessionFactoryBuilder
通过XML配置文件创建Configuration对象,然后通过build()创建SqlSessionFactory。

String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);

mybatis-config.xml中的配置,SqlSessionFactoryBuilder会解析xml成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。

SqlSessionFactory对象由SqlSessionFactoryBuilder创建

SqlSessionFactory主要是为了创建SqlSession对象,和SqlSessionFactoryBuilder对应一样,创建一个全局的就可以

SqlSession

完成一次数据库访问和结果的映射,类似于数据库的Session,由于不是线程安全的,所以SqlSession对象的作用域需要限制在方法内,默认实现类是DefaultSqlSession,有两个必须的属性:Configuration和Executor,SqlSession对数据库的操作都是由Executor来完成的。
SqlSession:默认创建DefaultSqlSession并开启一级缓存,创建Executor

SqlSession的getMapper()是联系应用程序和MyBatis的纽带,应用程序访问getMapper时,MyBatis会根据参数类型和XML配置信息生成一个代理对象,这个代理对象叫做Mapper对象,应用程序获取Mapper对象之后就可以通过这个对象唉访问MyBatis的SqlSession对象。

Executor

Executor对象在创建Configuration对象时创建,并缓存在Configuration对象中,主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中。

StatementHandler

真正访问数据库的地方,调用ResultSetHandler

ResultHandler

处理查询结果
在这里插入图片描述

https://mp.weixin.qq.com/s/2NPkpJyCvRuE-0UDxVDHRw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值