首页 > 其他分享 >从 SELECT 看 Mybatis 执行流程

从 SELECT 看 Mybatis 执行流程

时间:2023-07-06 17:35:37浏览次数:32  
标签:调用 流程 private SQL Mybatis 执行 方法 final SELECT

Mybatis 层次结构

  • 部件解释:

SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合
ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数
ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装
SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql 表示动态生成的SQL语句以及相应的参数信息
Configuration MyBatis所有的配置信息都维持在Configuration对象之中

mybatis mapper 动态代理的使用

1、通过 session 的 getMapper(Class) 方法获取对应的 Mapper session.getMapper(UserMapper.class)
2、把 getMapper 的执行逻辑交给 configuration 进行处理

3、configuration 说我管不了你这个逻辑,你找我内部的属性 mapperRegistry 把

mapperRegistry 维护的是对应的 mapper 对应的内容

4、从 mapperRegistry 的内部属性 knownMappers 获取对应的维护数据,同时通过 mapperProxyFactory.newInstance(sqlSession) 生成代理对象

5、动态代理生成对应的代理对象

6、通过 **Mapper 进行接口调用

7、进行 JDK 动态代理回调进行方法增强 invoke 接口

1、如果是 Object 的方法那么可以直接进行方法的调用不用进行增强,否则进行方法增强

8、通过 PlainMethodInvoker 中的 MapperMethod 进行方法的执行

9、调用 MapperMethod 的 execute 方法进行方法执行

1、构建 MapperMethod 时设置 SqlCommand 并初始化其中的相关属性
2、调用 SqlCommand 的 getType() 方法检查 SQL 类型,如果是查询需要通过返回值类型来选择具体的执行方法
3、通过 sqlSession 的相关方法进行 SQL 的解析执行
4、需要注意即使是 selectOne 方法也是执行的 selectList 方法

10、通过 configuration 的 getMappedStatement 获取存储的 MappedStatement 数据

11、通过 Executor 执行器进行具体的方法执行
12、从 MappedStatement 方法获取 BoundSql

1、BoundSql 封装了对应的 SQL 语句

  private final String sql;
  private final List<ParameterMapping> parameterMappings;
  // 参数数据
  private final Object parameterObject;
  private final Map<String, Object> additionalParameters;
  // 参数设置的元数据
  private final MetaObject metaParameters;

11、通过 queryFromDatabase 执行具体的逻辑调用 doQuery() 进行方法的执行

12、构建 StatementHandler 并进行 SQL 填充,默认选择 prepareStatement
13、通过 StatementHandler 执行 statement

1、通过 statement 执行 SQL
2、调用 ResultHandler 解析结果集


标签:调用,流程,private,SQL,Mybatis,执行,方法,final,SELECT
From: https://www.cnblogs.com/ayizzz/p/17532809.html

相关文章

  • 深入详解Mybatis的架构原理与6大核心流程
     MyBatis是Java生态中非常著名的一款ORM框架,目前在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。如果你想要进入一线大厂,能够熟练使用MyBatis开发已经是一项非常基本的技能,同时大厂也更希望自己的开发人员深入了解MyBatis框架的原理和核心实现。从这个......
  • 激光雷达基础介绍与仿真测试流程
    随着智能驾驶领域的快速发展与普及,激光雷达的轻量化、电子化和芯片化也逐渐成为趋势。由于激光雷达不受光线影响、分辨力高、支持3D立体,点云还支持AI算法训练等优点,一些主流车型在L3级别的智驾功能应用上搭载了激光雷达,从而完成更可靠和准确的目标探测。 在L2+或L3级以上的智驾......
  • Mybatis-SQL分析组件
    背景大促备战,最大的隐患项之一就是慢sql,带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,而且对sql好坏的评估有一定的技术要求,有一些缺乏经验或者因为不够仔细造成一个坏的sql成功走到了线上,等发现的时候要么是造成了线上影响、报警、或者后置的慢sql采集发现,这时......
  • 009Java基础之流程控制
    Java基础之流程控制1、用户交互ScannerScanner对象我们之前学的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。基本语法:Scannersc=newScan......
  • 实现流程化办公,该说不说还得借力低代码开发框架
    在科技的推动下,流程化办公已经成为潮流。如何实现流程化办公,让越来越多的企业打通各部门之间的协作,实现高效率发展?借力低代码开发框架,让那遥不可及的梦想变为现实,跟传统操作方式比起来,低代码开发框架灵活、易操作、好维护的特性深受喜爱,是实现数字化转型的得力助手。1、了解流程......
  • go select 使用总结
    转载请注明出处:在Go语言中,select语句用于处理多个通道的并发操作。它类似于switch语句,但是select语句用于通信操作,而不是条件判断。select语句会同时监听多个通道的操作,并选择其中一个可用的通道进行操作。select语句的语法如下:select{case<-channel1://......
  • 阿里Java二面:说说Spring MVC执行流程及原理?这样聊能吊打面试官
    面试找虐博主之前每次去面试必问的问题:“讲一下springmvc的执行流程以及常用组件的作用”;记得第一次和面试官说了大概的流程是这样的:“服务器收到一个请求后会先去HandlerMapping中匹配url,找到url之后用HandlerAdapter适配器去执行这个控制器(controller层),执行完之后返回一个mo......
  • 阿里Java二面:说说Spring MVC执行流程及原理?这样聊能吊打面试官
    面试找虐博主之前每次去面试必问的问题:“讲一下springmvc的执行流程以及常用组件的作用”;记得第一次和面试官说了大概的流程是这样的:“服务器收到一个请求后会先去HandlerMapping中匹配url,找到url之后用HandlerAdapter适配器去执行这个控制器(controller层),执行完之后返回一个mode......
  • 04_MyBatis03
    1.动态SQL问题之前我们在查询用户信息的时候,可以设置根据不同的条件查询用户信息,具体代码如下:可以根据用户id查询用户的信息Mapper接口publicList<User>queryUserById(Integerid);Mapper.xml<selectid="queryUserById"resultType="user"> select*fromuserwhere......
  • Spring MVC 执行流程
    SpringMVC执行流程SpringMVC框架整体的请求流程如图,该图显示了用户从请求Request到响应Response的完整流程。 1.用户发起Request请求,该请求被前端控制器(DispatcherServlet)处理。2.前端控制器(DispatcherServlet)请求处理映射器(HandlerMapping)查找Handler。3.处理映......