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

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

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

雾岛听风发布于 2026/3/16更新于 2026/6/1616 浏览
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. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • DeepSeek-R1-Distill-Llama-8B 部署教程:Docker Compose 多模型推理服务
  • GitHub 开源项目精选:AI 助手与边缘推理工具盘点
  • 基于 FPGA 的高速串行通信模块设计与验证
  • Web 安全:robots.txt 协议原理、利用与防御实战
  • 强化学习与大模型融合:从理论到机器人实践全解析
  • PHP 批量混淆加密工具:支持多级强度与纯 PHP 运行
  • PHP 批量混淆加密工具:四种强度与实战指南
  • WhisperX:实现 70 倍实时转录的词级时间戳与说话人分离工具
  • WhisperX:70 倍实时语音转录、词级时间戳与多说话人分离技术
  • Redis 7 持久化机制详解:RDB 与 AOF
  • iOS 26 开发兼容适配:UITabBar 液态玻璃效果与 WiFi SSID 获取
  • Spring ShedLock 指南
  • iOS 26 系统兼容适配:UITabBar 液态玻璃效果与 WiFi SSID 获取
  • iOS 开发新系统兼容适配:UITabBar 液态玻璃效果与 WiFi 获取
  • WhisperX:70 倍实时语音转录、词级时间戳与多说话人分离技术
  • NIC400 微架构生成流程详解
  • OpenClaw 本地 AI 助手跨平台部署与配置实战
  • 安川机器人与多种 PLC 的通讯配置及连接案例
  • 2026 主流 AI Agent 框架横评:OpenClaw 及衍生版对比与选型指南
  • Ubuntu 22.04 LTS (Jammy Jellyfish) 官方下载

相关免费在线工具

  • 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