news 2026/4/30 9:34:56

【12.MyBatis源码剖析与架构实战】12.SqlSource解析源码剖析-注解的解析⽅式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【12.MyBatis源码剖析与架构实战】12.SqlSource解析源码剖析-注解的解析⽅式

MyBatis 注解方式 SqlSource 解析源码剖析

除了传统的 XML 配置方式,MyBatis 也支持通过注解(如@Select@Insert等)直接在 Mapper 接口方法上定义 SQL。在初始化阶段,这些注解会被解析并创建对应的SqlSourceMappedStatement。本文将聚焦于注解方式的 SqlSource 解析过程,完整剖析 MyBatis 初始化阶段如何处理注解配置的 SQL 语句。


一、注解方式整体的解析流程图

MyBatis 初始化阶段,注解方式解析SqlSource的整体流程如下图所示。


二、入口:Mapper 接口的注册

MyBatis 启动时,XMLConfigBuilder会解析mybatis-config.xml中的mappers标签。当遇到mapper标签的class属性时,会走注解解析的路径:

// XMLConfigBuilder.mapperElement()elseif(resource==null&&mapperClass!=null){Class<?>mapperInterface=Resources.classForName(mapperClass);configuration.addMapper(mapperInterface);}

Configuration.addMapper最终调用MapperRegistry.addMapper,为 Mapper 接口创建代理工厂并解析注解:

// MapperRegistry.addMapper()public<T>voidaddMapper(Class<T>type){if(type.isInterface()){if(hasMapper(type)){thrownewRuntimeException("Type "+type+" is already known to the MapperRegistry.");}// 注册映射器代理工厂knownMappers.put(type,newMapperProxyFactory<>(type));// 解析注解类语句配置MapperAnnotationBuilderparser=newMapperAnnotationBuilder(config,type);parser.parse();}}

三、MapperAnnotationBuilder.parse():主入口

MapperAnnotationBuilder负责解析 Mapper 接口上的注解配置,其parse方法流程如下:

publicvoidparse(){Stringresource=type.toString();// 1. 尝试加载同名的XML配置文件(若有,XML会覆盖注解)if(!configuration.isResourceLoaded(resource)){loadXmlResource();configuration.addLoadedResource(resource);assistant.setCurrentNamespace(type.getName());// 2. 解析 @CacheNamespace 注解parseCache();// 3. 解析 @CacheNamespaceRef 注解parseCacheRef();// 4. 遍历接口中的每个方法,解析方法上的注解Method[]methods=type.getMethods();for(Methodmethod:methods){try{if(!method.isBridge()){
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 9:32:52

Zotero Style:让学术文献管理变得优雅高效的3大核心能力

Zotero Style&#xff1a;让学术文献管理变得优雅高效的3大核心能力 【免费下载链接】zotero-style Ethereal Style for Zotero 项目地址: https://gitcode.com/GitHub_Trending/zo/zotero-style Zotero Style是一款专为Zotero设计的增强插件&#xff0c;通过可视化进度…

作者头像 李华
网站建设 2026/4/30 9:32:51

猫抓Cat-Catch:浏览器资源嗅探的终极免费指南

猫抓Cat-Catch&#xff1a;浏览器资源嗅探的终极免费指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页视频而烦恼吗&#xf…

作者头像 李华
网站建设 2026/4/30 9:32:27

YOLOv8-Seg模型在RK3588和旭日X3上部署的实战踩坑记录(附完整代码)

YOLOv8-Seg模型在边缘计算芯片上的部署优化实战 边缘计算场景下&#xff0c;YOLOv8-Seg模型的部署往往面临算力受限、算子兼容性差、内存带宽紧张等现实挑战。本文将结合RK3588和旭日X3两款主流边缘芯片的特性&#xff0c;深入剖析分割模型部署中的关键技术难点&#xff0c;提…

作者头像 李华
网站建设 2026/4/30 9:29:14

Windows驱动管理终极指南:DriverStoreExplorer让你轻松掌控驱动程序

Windows驱动管理终极指南&#xff1a;DriverStoreExplorer让你轻松掌控驱动程序 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否遇到过Windows系统盘空间不足&#xff0c;却发现是…

作者头像 李华