MyMyBatis ③:MappedStatement 与三种 Executor
系列第 1 篇手写骨架系列第 2 篇手写 ParameterHandler——从?到#{}/${}源码https://github.com/OrigamiOrigamiOrigami/MyMyBatis前言前两篇里SQL 还挂在注解字符串上执行逻辑在DefaultSqlSession里。真实 MyBatis 不是这样每条语句会先变成MappedStatement真正访问数据库的是Executor。本篇把这条链路补上并实现三种执行器SIMPLE、REUSE、BATCH。本篇目标能力说明MappedStatementid、类型、SqlSource、resultType、缓存标记SqlSource静态 SQL 先落到RawSqlSourceExecutor统一query/update/commit/rollbackSIMPLE / REUSE / BATCH三种执行策略调用链变成Mapper 方法 → statementId 接口全名.方法名 → MappedStatement → BoundSql → Executor.query / update1. MappedStatement 里放什么至少要有这些字段publicclassMappedStatement{privatefinalStringid;// com.xxx.AccountMapper.selectAccountprivatefinalStringnamespace;privatefinalSqlCommandTypesqlCommandType;privatefinalSqlSourcesqlSource;privatefinalClass?resultType;privatefinalbooleanuseCache;privatefinalbooleanflushCache;}注册时机getMapper时扫描注解写入Configuration的 Map。StringidmapperInterface.getName().method.getName();configuration.addMappedStatement(builder.build());之后DefaultSqlSession不再直接读Select.value()而是StringstatementIdmethod.getDeclaringClass().getName().method.getName();MappedStatementmsconfiguration.getMappedStatement(statementId);ObjectparameterParamNameResolver.getNamedParams(method,args);if(ms.getSqlCommandType()SqlCommandType.SELECT){returnexecuteQuery(ms,method,parameter);}returnexecuteUpdate(ms,parameter);这样注解、XML、动态 SQL 最后都汇聚到同一种语句模型。2. SqlSource先静态后动态publicinterfaceSqlSource{BoundSqlgetBoundSql(ObjectparameterObject);}publicclassRawSqlSourceimplementsSqlSource{publicBoundSqlgetBoundSql(ObjectparameterObject){returnSqlSourceParser.parse(sql,parameterObject,null);}}第 2 篇的#{}解析继续复用。动态 SQL 放到第 ⑤ 篇再展开。3. Executor 接口publicinterfaceExecutor{intupdate(MappedStatementms,Objectparameter)throwsSQLException;EListEquery(MappedStatementms,Objectparameter)throwsSQLException;voidcommit(booleanrequired)throwsSQLException;voidrollback(booleanrequired)throwsSQLException;voidclose(booleanforceRollback);voidclearLocalCache();}注意query一律返回List。单对象、Integer、Map由SqlSession按方法返回类型拆包。这和官方思路一致。4. 三种执行器差在哪SIMPLE每次创建新的PreparedStatement用完关掉。实现最直接默认就用它。REUSE按 SQL 字符串缓存PreparedStatement同一会话里重复执行同一条语句时少一次 prepare。PreparedStatementpsstatementMap.get(sql);if(psnull){psgetConnection().prepareStatement(sql);statementMap.put(sql,ps);}BATCH写操作走addBatch在commit/ 查询前 /close时executeBatch。适合批量插入演示。ps.addBatch();// commit 时ps.executeBatch();配置方式Configuration.builder().database(jdbc.properties).executorType(ExecutorType.BATCH).build();Configuration.newExecutor(...)里按类型创建再交给插件链包装下一篇。5. BaseExecutor 里缓存怎么挂查询前用CacheKeystatementId 最终 SQL 参数查一级缓存写操作先清本地缓存并按 namespace 失效。细节在第 6 篇写这里先知道缓存逻辑上移到 Executor不再散落在 Session 各处。每个SqlSession创建自己的一级缓存二级缓存仍可共享。和官方的差距没有CachingExecutor单独包装层缓存写在BaseExecutorBATCH 返回值做了简化不是完整BatchResult模型没有StatementHandler再拆一层总结本篇之后MyMyBatis 的执行骨架接近官方语句有了MappedStatement数据库访问收口到ExecutorSIMPLE / REUSE / BATCH 可切换gitclone https://github.com/OrigamiOrigamiOrigami/MyMyBatis.git建议对照看mapping/MappedStatement.java、executor/*、session/DefaultSqlSession.java。下篇预告MyMyBatis ④手写插件责任链——InterceptsPlugin.wrap给 Executor 套上慢 SQL 监控。

相关新闻

Windows 11任务栏崩溃终极修复指南:ExplorerPatcher兼容性问题完全解决方案

Windows 11任务栏崩溃终极修复指南:ExplorerPatcher兼容性问题完全解决方案

Windows 11任务栏崩溃终极修复指南:ExplorerPatcher兼容性问题完全解决方案 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否…

2026/8/4 14:45:31 阅读更多 →
3步解锁WeMod专业版:Wand-Enhancer终极免费解决方案

3步解锁WeMod专业版:Wand-Enhancer终极免费解决方案

3步解锁WeMod专业版:Wand-Enhancer终极免费解决方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为WeMod的两小时时间限制而烦恼…

2026/8/4 14:45:31 阅读更多 →
2026面试|后端高并发+算法底层逻辑全解析(附Java实战代码)

2026面试|后端高并发+算法底层逻辑全解析(附Java实战代码)

我有许多朋友就已经成功的跳槽,有的还在家等候下一步的面试通知。我托朋友们收集了他们面试时所问道的问题,并进行了系统性的整理,找出了一些高频面试题。目前就整理了 Mysql、开源框架系列、微服务系列这三块,等待后续更新。主要…

2026/8/4 14:45:30 阅读更多 →

最新新闻

Nuitka打包Python项目实战:效率提升与体积优化

Nuitka打包Python项目实战:效率提升与体积优化

1. 为什么选择Nuitka打包Python项目 作为一名长期使用PyInstaller的Python开发者,我第一次接触Nuitka是在处理一个包含PyQt5和科学计算库的大型项目时。当时PyInstaller生成的exe体积达到惊人的300MB,启动时间超过10秒,这促使我开始寻找替代方…

2026/8/4 18:34:22 阅读更多 →
Java知识图谱构建:从原理到实践的全栈指南

Java知识图谱构建:从原理到实践的全栈指南

1. 项目背景与核心价值作为一名有8年经验的Java开发者,我深刻体会到知识碎片化带来的困扰。新技术层出不穷,面试考点日益复杂,工作中遇到的问题也千奇百怪。去年我用3个月时间构建了自己的Java知识图谱系统,现在每天节省至少2小时…

2026/8/4 18:34:22 阅读更多 →
无人机编程实战:构建集成密码破译的彩蛋房互动系统

无人机编程实战:构建集成密码破译的彩蛋房互动系统

最近在整理无人机相关项目时,发现不少爱好者对“彩蛋房”和“手伴”这类趣味玩法很感兴趣,尤其是在其中加入密码机制,能极大地提升互动性和挑战性。然而,网上关于如何系统性地实现“无人机彩蛋房手伴”并集成密码破译功能的教程比…

2026/8/4 18:34:22 阅读更多 →
智元机器人启动赴港上市,首席科学家罗剑岚或已离职

智元机器人启动赴港上市,首席科学家罗剑岚或已离职

罗剑岚从智元核心团队“消失”量子位发现,智元机器人官网最新合伙人团队名单中,原首席科学家罗剑岚的名字已不见踪影。此前2025年9月官网披露合伙人团队时,罗剑岚以合伙人、高级副总裁兼首席科学家的身份与邓泰华、彭志辉、姚卯青等人一同出现…

2026/8/4 18:34:22 阅读更多 →
计算机专业学生如何通过CTF竞赛快速提升实战能力

计算机专业学生如何通过CTF竞赛快速提升实战能力

1. 为什么计算机专业学生需要从CTF开始? 第一次接触CTF(Capture The Flag)是在大三的校赛上,看着学长们用几行Python脚本就解出了我苦思冥想两小时的题目,那种震撼至今难忘。CTF夺旗赛本质上是一种模拟真实网络安全攻防…

2026/8/4 18:34:22 阅读更多 →
动销 淘宝

动销 淘宝

淘宝抖音博主: 小赵电商运营(天猫仓源头) 抖音号:36795357161一、对接 天猫仓储渠道全链路物流信息,平台可追溯,平台风控更友好二、不晓得是哪个平台的动销抖音博主:团子玩电商 抖音号:27558177226

2026/8/4 18:32:21 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →