跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Spring Boot 集成 MyBatis 操作数据库实战

Spring Boot 集成 MyBatis 时,需解决传统 JDBC 模板代码繁琐的问题。涵盖环境搭建、注解与 XML 双模式开发、#{} 与 ${} 安全性对比、多表关联查询及企业级规范配置。重点在于利用 MyBatis 简化数据访问层交互,确保 SQL 执行效率与安全,配合 Druid 连接池实现生产级持久层架构。

雾岛听风发布于 2026/3/16更新于 2026/9/2060 浏览
Spring Boot 集成 MyBatis 操作数据库实战

Spring Boot 集成 MyBatis 操作数据库实战

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

传统 JDBC 的局限性

直接使用 JDBC 编程时,开发者往往陷入重复劳动中:创建数据库连接池并获取连接、编写带占位符的 SQL、手动绑定参数、处理结果集映射以及最后关闭资源。这些'模板代码'不仅效率低下,还容易引发资源泄露风险。

MyBatis 的优势

MyBatis 作为优秀的持久层框架,有效解决了上述痛点:

  • 简化交互:大幅减少程序与数据库交互的代码量。
  • 解耦 SQL:支持将 SQL 从 Java 代码分离至 XML 配置文件。
  • 灵活映射:自动将 SQL 结果集关联到 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 生成逻辑:

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

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

注解开发模式(适用于简单查询)

使用 @Mapper 接口定义数据访问逻辑,适合简单的 CRUD 操作:

@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);
}
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>

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

这是面试中的高频考点,也是安全性的关键:

特性#{} (预编译 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 到 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 模式,并始终优先使用 #{} 以规避安全风险。

目录

  1. Spring Boot 集成 MyBatis 操作数据库实战
  2. 为什么持久层开发需要 MyBatis?
  3. 传统 JDBC 的局限性
  4. MyBatis 的优势
  5. 环境搭建与核心配置
  6. 依赖引入
  7. 开启 SQL 执行日志
  8. MyBatis 开发实战(双模式详解)
  9. 注解开发模式(适用于简单查询)
  10. XML 映射模式(适用于复杂业务)
  11. 核心原理:#{} 与 ${} 的本质区别
  12. 多表关联查询进阶
  13. 企业级规范与优化建议
  14. 数据库命名规范
  15. Druid 连接池配置
  16. 总结

更多推荐文章

查看全部
  • AMD AI MAX+395 迷你主机基于 ROCm 部署 vLLM 大模型实践
  • Ubuntu 24.04.3 LTS 配置 Git 并连接 GitHub
  • 双指针算法:从移动零到复写零
  • OpenClaw 结合 cpolar 实现外网访问教程
  • Python Collections 模块核心数据结构与工具详解
  • 从零搭建 Vue 项目:使用 Webpack 配置开发环境
  • 渗透测试中的信息收集方法与流程详解
  • TWIST2 全身 VR 遥操控制系统:基于视觉观测预测人形机器人关节位置
  • 从零搭建个人云影院:PotPlayer 直连 Alist 实现云端流畅播放
  • 深度学习模型优化策略与实战调参
  • C++ 笔试刷题:排序子序列、消减整数与最长上升子序列
  • 用 Vibe Coding 实现 AI 全自动代码生成与交付
  • C++ 递归入门:汉诺塔问题的思路与实现
  • Open WebUI 与 CMD 下载模型的默认路径
  • Whisper.cpp 实战:CPU 环境下高效语音识别部署指南
  • FPGA 自学笔记:VIVADO RAM IP 核配置与使用
  • HTTPS 真的能防止重放攻击吗?
  • AI 产品经理必备技术能力与学习路径指南
  • MySQL 5.7 解压版安装与配置实战指南
  • Python 核心语法实战:从变量到文件操作一站式指南

相关免费在线工具

  • 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