MyBatis XML 开发实战:从配置到 CRUD 全解析
目录一、MyBatis XML 配置文件1.1 配置连接字符串和 MyBatis1.2 添加 Mapper 接口1.3 XML 的配置1.4 使用技巧二、CRUD 具体实现2.1 增加Insert2.2 删除Delete2.4 查询Select在 Spring Boot 项目中MyBatis 有两种常见的开发方式注解和XML。注解适合简单的 SQL而 XML 更适合编写复杂的动态 SQL。本文将带你从零开始完整梳理 MyBatis XML 的开发流程涵盖配置、Mapper 接口编写、XML 映射文件以及增删改查的具体实现。一、MyBatis XML 配置文件MyBatis 的开发有两种方式注解和XML。本文重点讲解 XML 方式。1.1 配置连接字符串和 MyBatis这一步需要进行两项设置数据库连接字符串和MyBatis 的 XML 文件配置。方式一application.propertiesspring.datasource.urljdbc:mysql://127.0.0.1:3306/lottery_system?characterEncodingutf8useSSLfalse # 连接数据库的⽤⼾名 spring.datasource.usernameroot # 连接数据库的密码 spring.datasource.password123456 ## MyBatis ## # 配置驼峰⾃动转换 mybatis.configuration.map-underscore-to-camel-casetrue # 配置mybatis xml的⽂件路径在 resources/mapper 创建所有表的 xml ⽂件 mybatis.mapper-locationsclasspath:mapper/*.xml方式二application.yml# 数据库连接配置 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncodingutf8useSSLfalse username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 配置 mybatis xml 的⽂件路径在 resources/mapper 创建所有表的 xml ⽂件 mybatis: mapper-locations: classpath:mapper/**Mapper.xml1.2 添加 Mapper 接口创建一个实体接口并加上Mapper 接口声明是数据库的接口Mapper public interface BookInfoMapper { Integer updateBook(Param(bookInfo) BookInfo bookInfo); }1.3 XML 的配置给 xml 开头添加配置文件只需要修改里面 namespace 里面的路径改为和自己 Mapper 声明的接口的路径就可以:?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom_yuyuan_book.mapper.BookInfoMapper /mapper1.4 使用技巧直接在接口使用 alt enter 调出 Generate statement然后点击 Generate statement会跳出 4 个选项自己选择自己要写的类型就好是修改还是查询还是删除还是插入。我选择 update Statement 在对应的 xml 文件里面就会有这一行就可以写入我们的数据库语句还有我们的动态sql了。二、CRUD 具体实现2.1 增加InsertUserInfoMapper 接口Integer insertUser(UserInfo userInfo);UserInfoMapper.xml实现insert idinsertUser insert into userinfo (username, password, age, gender, phone) values (#{username}, #{password}, #{age},#{gender},#{phone}) /insert也可以使用 Param 设置参数名称是放在 Mapper 接口下的函数的参数那里Integer insertUser(Param(userInfo) UserInfo userInfo);返回自增 id返回定义不变Mapper.xml实现设置 userGeneratedKeys 和 keyProperty 属性useGeneratedKeystrue 作用开启获取数据库自增主键keyPropertyid作用拿到主键赋值给实体类哪个属性。insert idinsertUser useGeneratedKeystrue keyPropertyid insert into user_info (username, password, age, gender, phone) values (#{userInfo.username},#{userInfo.password},#{userInfo.age},# {userInfo.gender},#{userInfo.phone}) /insert2.2 删除DeleteUserInfoMapper 接口Integer updateUser(UserInfo userInfo);UserInfoMapper.xml 实现update idupdateUser update user_info set username#{username} where id#{id} /update2.4 查询Select使用 XML 的方式查询也存在那三个问题的解决方法起别名结果映射开启驼峰自动转换1. 起别名的解决方法select idqueryAllUser resultMapBaseMap select id, username,password, age, gender, phone, delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from user_info /select2. 结果映射Mapper.xmlresultMap idBaseMap typecom.example.demo.model.UserInfo id columnid propertyid/id result columndelete_flag propertydeleteFlag/result result columncreate_time propertycreateTime/result result columnupdate_time propertyupdateTime/result /resultMap select idqueryAllUser resultMapBaseMap select id, username,password, age, gender, phone, delete_flag, create_time, update_time from user_info /select

相关新闻

基于MP2642GR-Z与STM32F373RC的2串电池主动均衡方案

基于MP2642GR-Z与STM32F373RC的2串电池主动均衡方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:51:44 阅读更多 →
基于Transformer的医学图像分割flask框架机器学习算法

基于Transformer的医学图像分割flask框架机器学习算法

✅源码获取: 🍅--------------------【点击左上方头像,在置顶文章上方的wx】联系我们-------------🍅✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。✌服务范围:大数据、机器学习…

2026/10/15 3:51:44 阅读更多 →
Feign实体传参失败原因与解决方案:序列化契约一致性详解

Feign实体传参失败原因与解决方案:序列化契约一致性详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:51:44 阅读更多 →

最新新闻

MIPS核心指令硬件原理与工程避坑指南

MIPS核心指令硬件原理与工程避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:46:53 阅读更多 →
iOS应用代码保护与Ipa Guard命令行自动化集成指南

iOS应用代码保护与Ipa Guard命令行自动化集成指南

1. 项目背景与核心价值在iOS应用开发领域,代码保护一直是开发者关注的重点。随着移动应用市场的竞争加剧,防止逆向工程和代码窃取变得尤为重要。传统的代码混淆工具往往需要手动操作,这在持续集成和自动化部署流程中显得效率低下。Ipa Guard命…

2026/10/15 4:46:53 阅读更多 →
Samba容器化实战:多租户隔离、协议兼容与权限映射

Samba容器化实战:多租户隔离、协议兼容与权限映射

1. 为什么在容器里跑Samba,而不是直接装在宿主机上?“Docker里跑Samba?这不反直觉吗?”——这是我第一次被团队同事问到这个问题时的真实反应。当时我们正在重构一个老旧的文件协作系统,原方案是在物理服务器上直接部署…

2026/10/15 4:46:53 阅读更多 →
STM32+华为云IoT+Qt:从传感器到云端的物联网数据链路实战

STM32+华为云IoT+Qt:从传感器到云端的物联网数据链路实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:46:53 阅读更多 →
沙箱代理工作流实战:隔离、权限与提示注入防御

沙箱代理工作流实战:隔离、权限与提示注入防御

1. 沙箱代理工作流到底在解决什么问题第一次接触“沙箱代理工作流”这个概念,是在一个自动化任务编排的项目里。当时团队想让一个智能代理去帮我们处理一批外部数据:抓取、清洗、分类、再写回内部系统。听起来很顺,但真正跑起来才发现&#x…

2026/10/15 4:46:53 阅读更多 →
模板代码生成工具:从元数据到可用接口的完整实现

模板代码生成工具:从元数据到可用接口的完整实现

1. 为什么需要模板代码生成工具:一大半重复代码其实不该手写做后端开发的朋友应该都有过这种体验:新项目启动,建表、写实体、写Mapper、写Service接口和实现、写Controller,然后前端再把列表页、表单页、弹窗、状态标签挨个撸一遍…

2026/10/15 4:45:53 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →