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

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

Spring Boot 结合 MyBatis 的集成与应用。对比传统 JDBC 局限性,展示日志配置、CRUD 及自增主键返回用法。深入解析#{}与${}底层差异及安全风险,分享企业级数据库命名规范与 Druid 连接池配置,助力构建稳健持久层架构。

技术博主发布于 2026/3/27更新于 2026/6/814 浏览
Spring Boot 集成 MyBatis 操作数据库实战

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

为什么需要 MyBatis?

在原生 JDBC 开发中,我们不得不面对大量重复劳动:手动管理连接池、编写带占位符的 SQL、逐行绑定参数、处理 ResultSet 结果集映射,以及在 finally 块中确保资源关闭。这些'样板代码'不仅效率低,还容易引发资源泄露。

MyBatis 作为优秀的持久层框架,通过简化交互、解耦 SQL 以及灵活的自动映射机制,有效解决了上述痛点。它允许我们将 SQL 从 Java 代码中剥离到 XML 配置文件中,让业务逻辑更清晰。

环境搭建与核心配置

依赖引入

在 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 开发实战

注解模式(简单查询)

对于简单的 CRUD 操作,使用 @Mapper 接口配合注解即可快速定义数据访问逻辑:

@Mapper
public interface  {
    
    
    UserInfo ;

    
    
    
    Integer ;
}
UserInfoMapper
// 根据 ID 查询用户
@Select("select * from user_info where id = #{id}")
queryById
(Integer id)
// 插入并返回自增主键 ID
@Insert("insert into user_info (username, password) values (#{username}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id")
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. 环境搭建与核心配置
  4. 依赖引入
  5. 开启 SQL 执行日志
  6. MyBatis 开发实战
  7. 注解模式(简单查询)
  8. XML 映射模式(复杂业务)
  9. 核心原理:#{} 与 ${} 的区别
  10. 进阶:多表关联查询
  11. 企业级规范与优化
  12. 数据库命名规范
  13. Druid 连接池配置
  14. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • C++ unordered_set 与 unordered_map 详解
  • SpringBoot 整合 Neo4j 图数据库项目实战详解
  • Python 数据可视化实战:Matplotlib、Seaborn 与 Plotly 绘图指南
  • 国产机器人大脑 RDK-S100 硬件与 AI 功能评测
  • AI 给产品经理带来的改变与未来展望
  • Claude Opus 4.6 发布:1M Token 上下文与编码能力升级
  • 群晖 Photos 零 GPU 实现人脸识别与 AI 相册功能
  • 2026 年技术求职:纯 LLM、多模态大模型与 AIGC 赛道选择
  • FPGA 实现 CAN 总线接口与数据帧解析
  • AIGC 插画创作技术解析与代码实战
  • C++ 多态机制详解
  • MAVROS 安装与基础梳理:ROS C++ 仿真实战
  • 张一鸣:10 年面试 2000 人,发现优秀者的共同特质
  • 前端高频面试题:场景题与核心知识点
  • llama.cpp llama-server 从命令行到 HTTP Server 实战与架构解析
  • Android 开发中 Cursor AI 配置与实践技巧
  • VSCode Copilot 登录异常排查与修复指南
  • OmniXtreme: 高动态人形机器人控制通用性壁垒突破
  • ComfyUI 云服务器部署实战与优化指南
  • 雷达信号处理中的 CFAR 技术详解

相关免费在线工具

  • 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