当前位置: 首页 > news >正文

Mybatis执行sql流程(一)

文章目录

    • 第一行:
    • 第二行:

代码中的两行代码是如何执行的?

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.selectById(userId);

第一行:

获取 Mapper 接口的代理对象,调用链如下:

SqlSession.getMapper()Configuration.getMapper()MapperRegistry.getMapper() // 使用map做了缓存,若没有则继续向下MapperProxyFactory.newInstance() // 使用 JDK 动态代理生成 Mapper 接口的代理对象。即返回的是一个动态生成代理类对象。具体的代理过程此处不详细介绍,在后文。

第二行:

执行SQL:动态代理拦截方法调用。
userMapper.selectById(userId); 上述得知userMapper对象是代理类对象,此处调用的selectById方法就是代理类中实现的接口方法(当然不是具体的实现内容,具体的实现内容在InvocationHandler与JDK动态代理相关)参考JDK动态代理

// 例如:执行userMapper.selectUserById(1);
MapperProxy.invoke() // MapperProxy 就是InvocationHandler的实现,即具体实现内容在此。在调用链中还涉及到二级缓存的事情,后续说明MapperMethod.execute() // MapperMethod 将方法调用转为SqlSession的操作,如selectOne/insert等SqlSession.selectOne()Executor.query() // 有多种执行器,后续详细说明MappedStatement.getBoundSql()query() // 此处涉及到一级缓存的事情,后续说明;如果没有命中一级缓存,则查询数据库Executor.prepareStatement() // 此处涉及到TypeHandler,将对应的java数据转化为sql类型的数据StatementHandler.query()PreparedStatement.execute() // 执行sqlResultHandler.handleResultSets() // 此处涉及到TypeHandler,将结果集转化为java类型的数据
ClientSqlSessionMapperProxyMapperMethodExecutorJDBCgetMapper(UserMapper.class)创建动态代理userMapper.selectUserById(1)解析方法调用selectOne("selectUserById", 1)query()执行 SQL返回 ResultSet转换为 User 对象返回结果ClientSqlSessionMapperProxyMapperMethodExecutorJDBC

相关内容:
JDK代理
Mybatis加载Mapper
MapperRegistry
MyBatis中JDK动态代理
Mybatis之MapperProxy
Mybatis之MapperMethod
Mybatis之Executor执行器
Mybatis之StatementHandler
Mybatis之KeyGenerator

http://www.dtcms.com/a/337680.html

相关文章:

  • TP6用word文档导入数学公式
  • AI心理助手开发文档
  • [系统架构设计师]未来信息综合技术(十一)
  • Linux unistd.h 包含功能
  • 基于 Ansible 与 Jinja2 模板的 LNMP 环境及 WordPress 自动化部署实践
  • 【C语言】gets和getchar的区别
  • JVM 面试精选 20 题
  • 达梦数据库DCA通关宝典,数据库管理运维学习
  • Java面试题及答案整理(2025年互联网大厂最新版,持续更新)
  • 从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
  • 亲测可用 [安卓]《神秘来电》V1.1无需登入无广告离线打开即用手机模拟发起虚假来电免费版
  • HTTPS面试题(更新中...)
  • 【速通】深度学习模型调试系统化方法论:从问题定位到性能优化
  • Vivado Design Flow
  • 深度学习在订单簿分析与短期价格预测中的应用探索
  • Windows 安装使用 MySQL
  • 44 C++ STL模板库13-容器5-容器适配器-队列(queue)
  • 生鲜冷冻商城系统冷链配送系统功能模块实现
  • Stability AI技术浅析(三):Stable LM模型
  • 【集合框架Map进阶】
  • 【VUE】Vue3 绘制 3D 蓝图利器 Grid Plan
  • 【Java】浅谈ThreadLocal
  • 【WSL2笔记10】WSL-Ubuntu 环境下 ComfyUI 本地部署性能最大化指南
  • 生产环境慎用 context.Background ():你的系统可能在 “空转”
  • CVPR 2025|英伟达联合牛津大学提出面向3D医学成像的统一分割基础模型
  • 【统刷】专题完结,题单汇总
  • 抽象工厂设计模式 Abstract Factory
  • Layui COP证书管理系统
  • html页面打水印效果
  • 码上爬第十八题【协程+webpack】