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

Spring Boot + MyBatis服务启动流程,新增代码跑通流程,映射规则,常见问题定位

一、服务启动流程零代码仅需配置文件和依赖。顺序固定由框架保证。一旦某个步骤失败如 XML 解析错误整个启动失败。二、新增代码跑通流程全手动需熟悉 MyBatis 映射规则、Spring 注解。编译时和运行时都可能出错如 XML 重复 id、SQL 语法错误、依赖注入循环等。结合启动流程新增代码必须符合启动流程的预期如 XML 位置必须在 mapperLocations 扫描路径内。三、 MyBatis 映射规则统一使用 XML 管理复杂映射尤其是动态 SQL 和关联查询注解适合简单查询。避免注解和 XML 混用除非明确分开 id。为每个表/模块独立一个 Mapper XML 片段 id 在同一文件内唯一。启用下划线转驼峰减少冗余的 resultMap。使用 Param 明确命名多参数提高可读性且避免参数顺序问题。开启 MyBatis 日志logging.level.com.example.mapperDEBUG快速定位映射错误。【基础映射resultType 与 resultMap】方式一resultType查询结果列名与 Java 属性名一致或通过 autoMapping 能匹配自动映射列名 user_name → 属性 userName需开启下划线转驼峰方式二resultMap列名与属性名不一致、需要复杂关联映射、类型转换控制显式定义 可指定 id、result、association、collection!-- resultType 自动映射 --selectidselectUserresultTypecom.example.Userselect user_id, user_name from user/select!-- resultMap 显式映射 --resultMapiduserMaptypeUseridcolumnuser_idpropertyuserId/resultcolumnuser_namepropertyuserName//resultMapselectidselectUserMapresultMapuserMapselect user_id, user_name from user/select【属性映射细节】下划线转驼峰自动映射全局配置启用后user_name → userName。mybatis:configuration:map-underscore-to-camel-case:true类型处理器TypeHandler 用法【参数映射】参数映射 指的是将 Java 方法中的实际参数值安全、正确地传递给 SQL 语句中占位符 #{…} 的过程。这是 MyBatis 执行 SQL 前的重要环节直接关系到 SQL 能否正确执行以及是否安全防 SQL 注入。在 Spring Boot MyBatis 注解/XML 混合开发中大多数情况下MyBatis 通过反射或 Param 注解能自动推断参数类型不需要显式写 parameterType仅在遇到参数为 null 导致异常或使用旧版 MyBatis 时才显式指定。方式一单个参数 xml的SQL语句中直接使用 #{任意名称}基础类型示例selectidgetUserByIdparameterTypelongresultTypeUserselect * from user where id #{id}/select对象示例自动读取对象的属性insertidinsertUserparameterTypeUserinsert into user(name, age) values(#{name}, #{age})/insertMap示例selectidgetUserparameterTypemapresultTypeUserselect * from user where id #{id}/select方式二 多个参数必须使用 Param。接口中通过 Param 重命名入参的名称xml的sql语句直接使用 #{属性名}UsergetUser(Param(uid)Longid,Param(name)Stringusername);selectidgetUserresultTypeUserselect * from user where id #{uid} and name #{name}/select【动态SQL】场景一 动态生成WHERE子句自动处理 AND 前缀去除多余的 AND/ORwhereiftestname ! null and name ! AND name LIKE CONCAT(%, #{name}, %)/ififtestage ! nullAND age #{age}/if/where场景二 动态生成 SET 子句自动去除多余逗号用于更新setiftestname ! nullname #{name},/ififtestage ! nullage #{age},/if/set场景三 多条件分支等价于 switch-case-defaultselectidselectUsersOrderByresultTypeUserSELECT * FROM userchoosewhentestorderField nameORDER BY name/whenwhentestorderField ageORDER BY age/whenotherwiseORDER BY id/otherwise/choose/select场景四 遍历集合foreachcollectionlistitemidopen(separator,close)#{id}/foreach场景五 绑定变量避免在 Java 代码中手动拼接selectidsearchUsersresultTypeUserbindnamepatternvalue% keyword %/SELECT * FROM user WHERE name LIKE #{pattern}/select场景六 自定义前缀、后缀、覆盖规则 自定义前缀、后缀、覆盖规则【关联映射】针对 SQL 语句执行结果的映射MyBatis 中的 一对一、一对多、多对多通常拆解为两个一对多 映射其本质就是 将 SQL 查询返回的扁平结果集多表连接后的表状数据转换为 Java 对象图。关联映射的输入SQL 语句执行后返回的 ResultSet扁平表结构。关联映射的输出具有嵌套关系的 Java 对象图。实现方式在 中定义 或 子标签指定子对象的属性、列映射以及如何区分不同行通过 标签。优势避免手动循环组装对象MyBatis 自动完成。场景一一对一classUser{privateLongid;privateRolerole;// 嵌套对象}resultMapiduserWithRoleMaptypeUseridcolumnidpropertyid/resultcolumnnamepropertyname/associationpropertyrolejavaTypeRoleidcolumnrole_idpropertyid/resultcolumnrole_namepropertyname//association/resultMapselectidgetUserWithRoleresultMapuserWithRoleMapSELECT u.id, u.name, r.id as role_id, r.name as role_name FROM user u LEFT JOIN role r ON u.role_id r.id WHERE u.id #{id}/select场景二一对多classUser{privateLongid;privateListOrderorders;}resultMapiduserWithOrdersMaptypeUseridcolumnidpropertyid/collectionpropertyordersofTypeOrderidcolumnorder_idpropertyid/resultcolumnorder_amountpropertyamount//collection/resultMapselectidgetUserWithOrdersresultMapuserWithOrdersMapSELECT u.id, o.id as order_id, o.amount as order_amount FROM user u LEFT JOIN orders o ON u.id o.user_id WHERE u.id #{id}/select场景三多对多 拆分为两个一对多或使用中间表关联。四、常见问题定位【报错一】[2026-05-22T06:52:08.12308:00 WARN 18792 — [study3] [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘authController’: Unsatisfied dependency expressed through field ‘userService’: Error creating bean with name ‘userService’: Unsatisfied dependency expressed through field ‘userMapper’: Error creating bean with name ‘userMapper’ defined in file [D:\demo2026\study3\study3\target\classes\com\example\study3\mapper\UserMapper.class]: Cannot resolve reference to bean ‘sqlSessionTemplate’ while setting bean property ‘sqlSessionTemplate’问题定位查看 Spring Boot 自动配置报告在 application.properties 中添加debugtrue重启应用控制台查看日志a. 关键字 DataSourceAutoConfiguration出现在 Negative matches 中b. 关键字 MyBatisAutoConfiguration出现在Positive matches 中解释sqlSessionTemplate Bean ——自动配置类匹配了但在实际创建 SqlSessionTemplate Bean 的过程中发生了异常导致该 Bean 最终没有被注册到容器中。日志说明类路径中存在 MyBatis 核心类存在唯一的 DataSource Bean没有自定义的 SqlSessionFactory 和 SqlSessionTemplate理论上 Spring 会自动创建 sqlSessionTemplate Bean但实际却失败了这说明 Bean 的实例化过程中抛出了异常可能是创建 SqlSessionFactory 时失败导致 sqlSessionTemplate 无法创建。c. 关键字 ‘sqlSessionFactory’根本原因TaskCheckResultMapper.xml 这个 MyBatis 映射文件解析失败了导致 sqlSessionFactory 无法创建进而引发 sqlSessionTemplate Bean 缺失最终导致 UserMapper 创建失败d. 关键字 Failed to parse mapping resource异常Mapped Statements collection already contains key com.example.study3.mapper.TaskCheckResultMapper.update解释MyBatis 中已经存在一个 id 为 update 的映射语句当尝试再次添加时发生冲突。这通常是因为 同一个 Mapper 接口中注解和 XML 定义了相同 id 的 SQL 操作。异常Error parsing Mapper XML. The XML location is ‘file [xxx.xml]’. Cause: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers already contains key com.解释xml中 被定义了两次导致 MyBatis 解析时出现重复键冲突。通过注解定义方式MapperpublicinterfaceTaskCheckResultMapper{Insert(INSERT INTO task_check_results (execution_id, checker_user_id, check_time, score, level, feedback, auto_checked, details_json) VALUES (#{executionId}, #{checkerUserId}, #{checkTime}, #{score}, #{level}, #{feedback}, #{autoChecked}, #{detailsJson}))Options(useGeneratedKeystrue,keyPropertycheckId)intinsert(TaskCheckResultresult);Select(SELECT * FROM task_check_results WHERE execution_id #{executionId})TaskCheckResultselectByExecutionId(LongexecutionId);Update(UPDATE task_check_results SET score #{score}, level #{level}, feedback #{feedback}, details_json #{detailsJson} WHERE check_id #{checkId})intupdate(TaskCheckResultresult);Delete(DELETE FROM task_check_results WHERE execution_id #{executionId})intdeleteByExecutionId(LongexecutionId);}xml方式?xml version1.0 encodingUTF-8?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.example.study3.mapper.TaskCheckResultMapperresultMapidBaseResultMaptypecom.example.study3.entity.TaskCheckResultidcolumncheck_idpropertycheckId/resultcolumnexecution_idpropertyexecutionId/resultcolumnchecker_user_idpropertycheckerUserId/resultcolumncheck_timepropertycheckTime/resultcolumnscorepropertyscore/resultcolumnlevelpropertylevel/resultcolumnfeedbackpropertyfeedback/resultcolumnauto_checkedpropertyautoChecked/resultcolumndetails_jsonpropertydetailsJson//resultMapinsertidinsertuseGeneratedKeystruekeyPropertycheckIdINSERT INTO task_check_results (execution_id, checker_user_id, check_time, score, level, feedback, auto_checked, details_json) VALUES (#{executionId}, #{checkerUserId}, #{checkTime}, #{score}, #{level}, #{feedback}, #{autoChecked}, #{detailsJson})/insertselectidselectByExecutionIdresultMapBaseResultMapSELECT * FROM task_check_results WHERE execution_id #{executionId}/selectupdateidupdateUPDATE task_check_results SET score #{score}, level #{level}, feedback #{feedback}, details_json #{detailsJson} WHERE check_id #{checkId}/updatedeleteiddeleteByExecutionIdDELETE FROM task_check_results WHERE execution_id #{executionId}/delete/mapper

相关文章:

Spring Boot + MyBatis服务启动流程,新增代码跑通流程,映射规则,常见问题定位

一、服务启动流程 零代码(仅需配置文件和依赖)。 顺序固定,由框架保证。 一旦某个步骤失败(如 XML 解析错误),整个启动失败。 二、新增代码跑通流程 全手动,需熟悉 MyBatis 映射规则、Spring…...

用Delphi 7打造动物农场小游戏:一场编程与数据结构的趣味之旅

文章来自:用Delphi 7打造动物农场小游戏:一场编程与数据结构的趣味之旅 当经典的Pascal语言遇上可爱的动物农场,会擦出怎样的火花? 前言 还记得第一次接触编程时的兴奋吗?当你敲下第一行代码,看到"He…...

Rust 环境搭建指南

Rust 环境搭建指南 引言 Rust 是一种系统编程语言,以其高性能、内存安全和并发特性而闻名。在本文中,我们将详细讲解如何搭建 Rust 开发环境,包括安装 Rust 语言、配置编辑器以及使用 Rust 包管理器 Cargo。 安装 Rust 系统要求 在开始之前,请确保您的计算机满足以下系…...

鸿蒙electron跨端框架PC简序实战:把轻任务、优先级和截止时间塞进一张桌面清单

前言 欢迎加入鸿蒙PC开发者社区,共同打造开发者工具生态:鸿蒙PC开发者社区 :https://harmonypc.csdn.net/ 开源地址:https://AtomGit.com/lqjmac/ele-shixu?source_modulesearch_project 写 简序 时,我没有把它当成…...

痛苦本身没有价值,从痛苦中提炼出的原则才有价值

如何打破"好了伤疤忘了疼"的人性循环 目录 如何打破"好了伤疤忘了疼"的人性循环 为什么我们天生就"好了伤疤忘了疼" 真正有效的解决方法:把"感性记忆"转化为"理性制度" 第一级:痛苦发生时——立刻"固化"教训,…...

终极AMD Ryzen调试工具:SMUDebugTool完全使用指南

终极AMD Ryzen调试工具:SMUDebugTool完全使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

vue3 大屏列表轮播,使用transition-group

一、transition-group介绍transition-group 是 Vue 框架中专门用来给列表添加动画效果的内置组件‌,它能让你在做添加、删除或排序列表项时,看到平滑的过渡动画 。‌‌‌对应的css:例如:transition-group的类名为 list动画类名就为…...

【限时公开】我们压测了23个开源AI Agent框架,仅2个支持亚秒级SQL生成+自动schema纠错(测试报告PDF已备)

更多请点击: https://codechina.net 第一章:AI Agent数据分析应用 AI Agent 正在重塑数据分析的范式——它不再依赖人工编写 SQL 或手动配置 ETL 流程,而是通过自然语言理解任务意图、自主调用工具、迭代验证结果,并生成可解释的…...

知名私募急招超高频的人选,tick级别那种,预算八位数+cut,欢迎自荐、推荐[嘿哈]

知名私募急招超高频的人选,tick级别那种,预算八位数cut,欢迎自荐、推荐[嘿哈]...

昇腾CANN manifest:仓库清单与版本管理实战

55 个独立仓库,每个仓库独立迭代——CANN 8.0 里的 ops-transformer 是哪个 commit?hccl 是 v2.1.3 还是 v2.2.0?runtime 和 driver 的版本是否兼容?manifest 仓库用一份 XML 格式的清单文件回答了所有这些问题。它是 CANN 发行版…...

顶伯在线语音工具

⌨️ 顶伯在线语音工具快捷键大全顶伯文字转语音工具内置了丰富的快捷键,让您无需鼠标即可高效操控微软 TTS 引擎。下面为您汇总全部快捷键,建议收藏。⭐⚡ 一、核心操作快捷键▶️ 播放 / 暂停:Ctrl Enter开始或暂停当前文本的语音合成⏹️…...

FlashAttention的水印攻击:怎么知道你的模型被偷用或篡改了?

之前有个公司发现,他们的Llama-2-7B模型被人克隆了一份,部署在了另一个云服务上。巧的是,那个克隆模型的输出跟他们的一模一样——连生成风格都一样。 他们去查代码,发现对方的代码里也用了npu_flash_attention。他们想知道&…...

为ClaudeCode配置Taotoken作为备用API解决访问限制

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为ClaudeCode配置Taotoken作为备用API解决访问限制 基础教程类,指导经常遇到ClaudeCode访问限制的开发者,如…...

紧急!财政部新发《AI增强型审计工作指引(试行)》第4.2条直指Agent记忆泄露风险:3类必查缓存节点+2分钟自检脚本

更多请点击: https://kaifayun.com 第一章:AI Agent审计行业应用 AI Agent在审计行业的深度渗透正重塑传统作业范式。不同于规则驱动的RPA工具,AI Agent具备目标分解、工具调用、多步推理与自主反馈能力,可动态适配审计场景中的非…...

FastGithub终极指南:3步解决GitHub访问卡顿,让开发效率提升5倍

FastGithub终极指南:3步解决GitHub访问卡顿,让开发效率提升5倍 【免费下载链接】FastGithub github定制版的dns服务,解析访问github最快的ip 项目地址: https://gitcode.com/gh_mirrors/fa/FastGithub 你是否曾经因为GitHub访问缓慢而…...

2026年京东云OpenClaw/Hermes Agent配置Token Plan安装保姆级分享

2026年京东云OpenClaw/Hermes Agent配置Token Plan安装保姆级分享、OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具…...

基于首届中国互联网数据挖掘竞赛数据集的行为相似网络分析

在互联网行为分析中,“社交网络分析”不一定只能依赖好友、关注、私信或转发关系。很多时候,数据里并没有显式的社交边,但用户的网页访问、应用使用、停留时长和活跃节奏,本身就能反映出相似的兴趣圈层。 本项目中的“社交网络分析…...

基于改进粒子群算法的混合储能系统容量优化附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

【光学】偏振光线追迹Matlab仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

移动储能车远程管理平台解决方案

随着新能源产业快速发展,移动储能车作为灵活、高效的储能载体,在应急保电、抢险救援、野外作业、电网增容等场景中应用日益广泛。然而,传统管理模式下,车辆分布广、工况复杂,存在运行状态不可视、故障响应滞后、运维成…...

5分钟彻底掌握Windows驱动管理:DriverStore Explorer完全指南

5分钟彻底掌握Windows驱动管理:DriverStore Explorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间持续减少,却找不到原因…...

Seraphine:你的英雄联盟智能助手,3大核心功能提升游戏决策力

Seraphine:你的英雄联盟智能助手,3大核心功能提升游戏决策力 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 想象一下这样的场景:你刚刚进入英雄联盟的排位赛BP阶段&#x…...

《设计数据密集型应用》(DDIA, 2nd ed.) 心智模型导览——《Designing Data-Intensive Applications》书介绍导航

《设计数据密集型应用》(DDIA, 2nd ed.) 心智模型导览——《Designing Data-Intensive Applications》书介绍导航写给:还没读过这本书、想先在脑子里有张地图的读者 目的:装上 6 个内容枢纽——不只是抽象概念,每个枢纽下面挂着这本书真正讲的…...

企业级RAG落地需要考虑的七个优化指标

在企业级RAG应用中,单纯跑通流程只是起点。要让系统真正稳定、准确、高效、安全地服务于业务,需要从以下七个维度进行系统性优化。这些建议基于生产环境的最佳实践总结。 一、检索质量优化(核心中的核心) 1.1 分块策略精细化文档类…...

索尼360 Reality Audio发展受阻,苹果携手杜比让空间音频成主流

索尼的行动与失察索尼在市场创新方面思路正确,利用个人音频业务融入技术,争取平台采用,吸引音乐家录制专辑,授权音频制造商。但没料到自己不会成为沉浸式音频未来的关键参与者,失误只因不是苹果。空间音频如何定义2010…...

从零打造 AI 小说创作平台(四):项目与章节管理

从零打造 AI 小说创作平台(四):项目与章节管理 系列:从零打造 AI 小说创作平台 NovelForge 篇章:第 4 篇 / 共 10 篇 关键词:CRUD、自动保存、软删除、章节排序、字数统计 前言 项目管理是连接用户认证和 AI 创作流水线的桥梁。这个模块看似简单(就是 CRUD),但有几个…...

UE5官方文档(第一人称射击游戏教程)解读 第七章

好了,今天来到我们的第七章,今天将承上启下,延伸输入部分的工作。 配置角色移动 Coder 03 Configure Character Movement with C in Unreal Engine | Unreal Engine 5.7 Documentation | Epic Developer Community // Copyright Epic Games…...

2026最新大模型入门电子书学习推荐,必读9本大模型书籍

大模型入门必读的9本书籍汇总NO.1: 《基于GPT-3,ChatGPT,GPT-4等Transformer架构的自然语言处理》主要内容: 了解用于解决复杂语言问题的新技术。将GPT-3与T5、GPT-2和基于BERT的Transformer的结果进行对比。使用TensorFlow、PyTorch和GPT-3执…...

85%企业将淘汰纯业务程序员!2026年前,大模型才是你的职业救命稻草!

文章指出传统技术岗面临淘汰风险,85%企业计划在2026年前淘汰纯业务型程序员。未来职场核心竞争力在于掌握大模型技术。文章强调大模型技术是技术人的时代红利,提供从入门到精通的全套视频教程,涵盖提示词工程、RAG、Agent等技术点。文章还分析…...

大模型落地应用全景解析:出海企业如何抓住价值变现新风口?

本文深度剖析了中国大模型在金融、零售、汽车、教育等领域的落地应用现状,指出市场重心已从技术基建转向场景变现,企业从免费试用转向为实际效果付费。文章强调智能体(Agent)成核心趋势,AI原生产品将重塑用户体验。同时…...