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

Spring Boot 集成 MyBatis 实战详解(一)

综述由AI生成Spring Boot 集成 MyBatis 涉及依赖配置、SQL 映射及安全性处理。相比传统 JDBC,MyBatis 简化了资源管理与结果集映射,支持注解与 XML 两种开发模式。核心在于理解 #{} 预编译与 ${} 字符串替换的安全差异,避免 SQL 注入。企业级开发中应遵循数据库命名规范,开启驼峰转换,并结合 Druid 连接池提升监控能力。根据业务复杂度灵活选择映射方式,能有效构建稳健的持久层架构。

剑仙发布于 2026/3/21更新于 2026/5/85 浏览
Spring Boot 集成 MyBatis 实战详解(一)

Spring Boot 集成 MyBatis 实战详解(一)

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

早期使用 JDBC 时,开发者得手动管理连接池、编写带占位符的 SQL、绑定参数、处理结果集并在 finally 块关闭资源。这些重复的模板代码不仅效率低,还容易引发资源泄露。

MyBatis 作为优秀的持久层框架,通过简化交互、解耦 SQL 和灵活映射解决了这些问题。它让程序与数据库的交互代码量大幅减少,支持将 SQL 分离到 XML 配置中,并能自动将结果集关联到 Java 实体类。

环境搭建与核心配置

在 pom.xml 中加入 MyBatis Starter 和 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 接口并添加 @Mapper 注解:

@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 注入风险
引号处理自动拼接字符串引号不会自动拼接引号
性能高,执行计划缓存较低,每次需重新解析

实际开发中应优先使用 #{},除非有特定需求才考虑 ${}。

多表关联查询进阶

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. 驼峰转换:在配置文件中开启 map-underscore-to-camel-case: true,实现数据库字段到 Java 属性的自动映射。
  3. 连接池:引入 Druid 连接池以获得更强的监控功能:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.21</version>
</dependency>

MyBatis 通过灵活的 SQL 映射极大提升了开发效率。根据业务复杂度选择注解或 XML 模式,并始终注意 SQL 注入风险,是构建稳健持久层架构的关键。

目录

  1. Spring Boot 集成 MyBatis 实战详解(一)
  2. 为什么持久层开发需要 MyBatis?
  3. 环境搭建与核心配置
  4. MyBatis 开发实战
  5. 注解模式
  6. XML 映射模式
  7. 核心原理:#{} 与 ${} 的区别
  8. 多表关联查询进阶
  9. 企业级规范与优化
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 大模型、RAG、Agent、知识库、向量数据库与知识图谱的区别及联系综述
  • Python 实现 MCP 客户端调用高德地图天气查询示例
  • GitHub 教育优惠申请及 Copilot Pro 开通指南
  • Spring Boot 整合 MyBatis-Plus 实现多数据源配置
  • VSCode 使用 Git 快速提交代码指南
  • Qwen2.5 代码补全实测:低成本替代 GitHub Copilot 方案
  • 大厂面试流程解析与核心技术考点汇总
  • Linux 下 Tomcat 结合内网穿透实现 Web 应用公网访问
  • Open WebUI Docker 部署指南与最佳实践
  • 基于 OpenHarmony 的 Flutter 智能家居应用开发实战
  • 分隔链表算法详解:双虚拟头节点拆解合并法
  • Mac Mini M4 本地部署大模型:Ollama、Llama 与绘图工具指南
  • 使用 VibeThinker 辅助解决动态规划问题:以跳跃游戏为例
  • GPT4ALL 本地部署大模型实战指南
  • Neo4j 图数据库从搭建到项目使用深度详解
  • Nunchaku FLUX.1 CustomV3 镜像快速上手指南
  • Claw Cloud Run 免费部署前端网页指南
  • 具身智能中的 Python 行为树 (py_trees) 解析与实战
  • Google 发布 2020 图像匹配基准与挑战赛
  • C++ 备忘录模式实战:对象状态保存与恢复

相关免费在线工具

  • 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