跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Spring Boot 集成 MyBatis 操作数据库指南

Spring Boot 集成 MyBatis 涉及环境搭建、配置优化及核心用法。通过对比 JDBC 痛点,展示注解与 XML 两种开发模式差异。重点解析#{}预编译与${}占位符的安全区别,涵盖多表关联查询、数据库命名规范及 Druid 连接池配置,助力构建稳健持久层架构。

微码行者发布于 2026/3/30更新于 2026/4/252 浏览
Spring Boot 集成 MyBatis 操作数据库指南

Spring Boot 集成 MyBatis 操作数据库指南

为什么持久层开发需要 MyBatis?

写 JDBC 的时候,大家最头疼的就是那些重复的样板代码:手动创建连接池、获取 Connection、编写带占位符的 SQL、一个个绑定参数、处理 ResultSet 结果集映射到对象,最后还得在 finally 块里确保资源关闭。这些不仅效率低,还容易埋下资源泄露的隐患。

MyBatis 作为优秀的持久层框架,很好地解决了这些问题。它极大缩短了程序与数据库交互的代码量,支持将 SQL 从 Java 代码中分离到 XML 配置文件里,还能自动把结果集关联到 Java 实体类,让开发者更专注于业务逻辑。

环境搭建与核心配置

依赖引入

先在 pom.xml 里把 MyBatis 起步依赖和 MySQL 驱动加上。版本选择上建议根据项目实际情况调整,这里以常用版本为例:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>
开启 SQL 执行日志

调试阶段,打印 SQL 很有必要。在配置文件中开启日志实现,能实时看到生成的 SQL 语句:

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

MyBatis 开发实战(双模式详解)

注解开发模式

对于简单的查询或插入,注解模式非常轻量。直接在 Mapper 接口上加 @Mapper,配合 @Select、@Insert 等注解即可。

比如查询用户和插入并返回自增 ID:

@Mapper
public interface UserInfoMapper {
    // 根据 ID 查询用户
    @Select("select * from user_info where id = #{id}")
    UserInfo queryById(Integer id);

    // 插入并返回自增主键 ID
    @Insert("insert into user_info (username, password) values (#{username}, #{password})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    Integer insert(UserInfo userInfo);
}

注意 @Options 里的 useGeneratedKeys,这是告诉 MyBatis 去拿数据库生成的主键值回传给对象。

XML 映射模式

当涉及多表查询或动态 SQL 时,XML 模式是更好的选择,逻辑解耦更清晰。

<mapper namespace="com.example.demo.mapper.UserInfoXmlMapper">
    <resultMap id="BaseMap" type="com.example.demo.model.UserInfo">
        <id column="id" property="id"></id>
        <result column="delete_flag" property="deleteFlag"></result>
    </resultMap>
    <select id="queryAllUser" resultMap="BaseMap">
        select * from user_info
    </select>
</mapper>

这里定义了 resultMap 来处理字段名和属性名的映射,比如数据库的 delete_flag 对应 Java 的 deleteFlag。

核心原理:#{} 与 ${} 的本质区别

这是面试常考点,也是安全红线。两者虽然都能传参,但底层机制完全不同。

特性#{} (预编译 SQL)${} (即时 SQL)
工作原理使用 ? 占位,提前解析优化直接进行字符串替换
安全性防止 SQL 注入存在 SQL 注入风险
引号处理自动拼接字符串引号不会自动拼接引号
性能高,编译一次后缓存执行计划较低,每次需重新解析

实际开发中,除非万不得已(比如动态表名),否则一律优先使用 #{}。

多表关联查询进阶

MyBatis 处理单表或多表的核心逻辑是一致的,关键在于通过映射关系把联表 SQL 的运行结果关联到实体类。

@Select("SELECT ta.id, ta.title, tb.username FROM articleinfo ta LEFT JOIN user_info tb ON ta.uid = tb.id WHERE ta.id = #{id}")
ArticleInfo queryUserByUid(Integer id);

企业级规范与优化建议

数据库命名规范
  1. 蛇形命名:表名和字段名统一用小写字母,单词间用下划线分割,例如 user_info。
  2. 开启驼峰转换:在 yml 配置中开启 map-underscore-to-camel-case: true,这样数据库的 abc_xyz 就能自动映射到 Java 的 abcXyz,省去大量手动配置。
Druid 连接池配置

为了获得更强大的监控功能,推荐引入阿里巴巴开源的 Druid 连接池:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.21</version>
</dependency>

总结

MyBatis 通过灵活的配置和 SQL 映射,显著提升了 Java 开发效率。在实际项目中,应根据业务复杂度灵活选择注解或 XML 模式,并始终优先使用 #{} 规避安全风险。配合规范的命名和连接池管理,就能构建出稳健的持久层架构。

参考资料

  • MyBatis 官方文档
  • Alibaba Druid 配置指南

目录

  1. Spring Boot 集成 MyBatis 操作数据库指南
  2. 为什么持久层开发需要 MyBatis?
  3. 环境搭建与核心配置
  4. 依赖引入
  5. 开启 SQL 执行日志
  6. MyBatis 开发实战(双模式详解)
  7. 注解开发模式
  8. XML 映射模式
  9. 核心原理:#{} 与 ${} 的本质区别
  10. 多表关联查询进阶
  11. 企业级规范与优化建议
  12. 数据库命名规范
  13. Druid 连接池配置
  14. 总结
  15. 参考资料
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Java 的家政服务管理系统的设计与实现
  • 利用 Anthropic Skill 提升大模型前端设计审美
  • C++ 基础语法与算法初步:从循环到递归
  • Python FastAPI 入门实战:从零构建生产级 RESTful API
  • 前端函数防抖原理与实战实现
  • 大模型 Token 机制与上下文窗口管理实战
  • Python 办公自动化实战:批量处理 Excel Word PPT
  • 4nm 移动 SoC 三星高能效 NPU 架构解析
  • 大语言模型提示词工程(Prompt)基础与实践
  • C# 数据类型详解
  • Clawdbot 飞书机器人配置教程
  • PX4 飞控固件烧写与更新方法详解
  • 默认安全治理实践:水平越权检测与前端安全防控
  • AMD 显卡 llama.cpp 兼容性与部署指南
  • ToDesk ToClaw 评测:零门槛体验 OpenClaw 级 AI 自动化
  • Redis Hash 数据类型及相关指令详解
  • GPU 算力云服务的技术探索与 AIGC 应用支持
  • Z-Image:无需登录注册的免费 AI 图像生成工具评测
  • Stable Diffusion 文生图基础详解与参数配置
  • 学习大语言模型原理必看的 10 篇论文

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online