mybatis执行流程
-
JDBC执行流程回顾
- JBDC的底层主要是三个接口对象:Connection、Statement、ResultSet。
- Connection用于建立与数据库的连接,Statement用于向数据库发送sql语句,ResultSet用于封装sql查询语句的结果。
JDBC操作数据库主要步骤:
- 注册驱动
使用 Class.forName() 方法加载数据库驱动程序类。 - 获取连接对象
JDBC的底层其实是使用Socket进行连接数据库的。 - 执行SQL语句,返回执行结果
通过获取Statement实例执行SQL语句。 - 处理执行结果
最后返回的结果集是ResultSet。 - 释放资源
-
mybatis执行流程
- 读取MyBatis的核心配置文件,这个核心配置文件最终会被封装成一个Configuration对象;
- 加载映射文件,常见的配置的方式有两种,一种是package扫描包,一种是mapper找到配置文件的位置。
- 构造会话工厂获取SqlSessionFactory,用建造者设计模式使用SqlSessionFactoryBuilder对象构建的,SqlSessionFactory的最佳作用域是应用作用域。
- 创建会话对象SqlSession,SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
- Executor执行器,是MyBatis的核心,负责SQL语句的生成和查询缓存的维护,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
- MappedStatement对象,MappedStatement是对解析的SQL的语句封装,一个MappedStatement代表了一个sql语句标签。
- 输入参数映射,输入参数类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型,这个过程类似于JDBC的预编译处理参数的过程,有两个属性 parameterType和parameterMap
- 封装结果集。可以封装成多种类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型。
-
Mybatis的mapper为啥只有接口没有实现类,也能工作,主要是由于动态代理。
- Mapper接口与XML的关联:
- Mybatis初始化时,会解析XML配置文件,将里面定义的SQL语句与Mapper接口的方法建立映射关系,并保存在配置对象中。
- 动态代理的创建:
- 当我们调用SqlSession.getMapper()方法时,Mybatis使用Java动态代理机制,为Mapper接口创建代理对象。
- 代理对象的创建,主要通过MapperProxyFactory类来完成。
- 调用代理对象的方法时的内部处理:
- 当调用Mapper接口中的方法时,实际上调用的是代理对象的invoke方法。
- 在invoke方法中,Mybatis使用之前的映射关系,找到与方法对应的SQL语句。
- SQL语句的执行:
- 找到SQL语句后,Mybatis会调用底层的执行器(Executor)来执行SQL语句,并完成参数的绑定,查询,以及结果返回。
- Mapper接口与XML的关联:
参考:https://blog.csdn.net/qq_51634677/article/details/131458267
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)