Spring Boot 实战:MyBatis 操作数据库(上)

Spring Boot 实战:MyBatis 操作数据库(上)
—JavaEE专栏—

Spring Boot 实战:MyBatis 操作数据库(上)

摘要

本文深度解析了 Spring Boot 环境下 MyBatis 的集成与应用。通过回顾传统 JDBC 的局限性,详细展示了 MyBatis 在日志配置、CRUD 操作、自增主键返回及多表查询中的实战用法。同时,文章深入探讨了 #{} ${} 的底层预编译差异及安全风险,并分享了企业级开发中的数据库命名规范与 Druid 连接池配置,助力开发者构建稳健的持久层架构。


文章目录

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

1.1 传统 JDBC 的局限性

在 JDBC 编程中,开发者需要手动完成以下繁琐步骤:

  1. 创建数据库连接池 DataSource 并获取 Connection
  2. 编写带 ? 占位符的 SQL。
  3. 手动绑定每一个参数。
  4. 处理 ResultSet 结果集并手动映射到对象。
  5. finally 块中手动关闭资源。

这些重复性的“模板代码”不仅效率低下,且容易产生资源泄露风险。

1.2 MyBatis 的优势

MyBatis 是一款优秀的持久层框架(数据访问层 DAO),它通过以下特性解决了 JDBC 的痛点:

  • 简化交互:极大缩短了程序与数据库交互的代码量。
  • 解耦 SQL:支持将 SQL 从 Java 代码中分离到 XML 配置文件中。
  • 灵活映射:自动将 SQL 结果集关联到 Java 实体类。

2. 环境搭建与核心配置

2.1 依赖引入

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>

2.2 开启 SQL 执行日志

为了方便调试,建议在配置文件中开启日志打印,实时查看 SQL 生成逻辑:

mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 输出 SQL 到控制台

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

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

使用 @Mapper 接口定义数据访问逻辑:

@MapperpublicinterfaceUserInfoMapper{// 根据 ID 查询用户@Select("select * from user_info where id = #{id}")UserInfoqueryById(Integer id);// 插入并返回自增主键 ID@Insert("insert into user_info (username, password) values (#{username}, #{password})")@Options(useGeneratedKeys =true, keyProperty ="id")Integerinsert(UserInfo userInfo);}

3.2 XML 映射模式(适用于复杂业务)

对于多表查询或动态 SQL,XML 模式是最佳选择:

<mappernamespace="com.example.demo.mapper.UserInfoXMlMapper"><resultMapid="BaseMap"type="com.example.demo.model.UserInfo"><idcolumn="id"property="id"></id><resultcolumn="delete_flag"property="deleteFlag"></result></resultMap><selectid="queryAllUser"resultMap="BaseMap"> select * from user_info </select></mapper>

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

这是文章的技术深度所在,面试必考:

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

5. 多表关联查询进阶

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}")ArticleInfoqueryUserByUid(Integer id);

6. 企业级规范与优化建议

6.1 数据库命名规范

  1. 蛇形命名:表名和字段名使用小写字母,单词间以下划线分割(如 user_info)。
  2. 开启驼峰转换:在 yml 中配置 map-underscore-to-camel-case: true,实现 abc_xyzabcXyz 的自动映射。

6.2 Druid 连接池配置

引入阿里巴巴开源的 Druid 连接池以获得更强大的监控功能:

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

7. 总结

MyBatis 通过简单的配置和灵活的 SQL 映射极大提升了 Java 开发效率。在实际开发中,应根据业务复杂度灵活选择注解或 XML 模式,并始终优先使用 #{} 以规避安全风险。


读者互动区

投票:你在开发中更倾向于使用哪种 MyBatis 模式?

  • A. 纯注解开发,简单快捷
  • B. 全 XML 映射,逻辑解耦
  • C. 混合使用,视复杂度而定

Read more

DeepFace深度学习库+OpenCV实现——情绪分析器

DeepFace深度学习库+OpenCV实现——情绪分析器

目录 应用场景 实现组件 1. 硬件组件 2. 软件库与依赖 3. 功能模块 代码详解(实现思路) 导入必要的库 打开摄像头并初始化变量 主循环 FPS计算 情绪分析及结果展示 显示FPS和图像 退出条件 编辑 完整代码 效果展示 自然的 开心的 伤心的 恐惧的 惊讶的  效果展示 自然的 开心的 伤心的 恐惧的 惊讶的   应用场景         应用场景比较广泛,尤其是在需要了解和分析人类情感反应的场合。: 1. 心理健康评估:在心理健康领域,可以通过长期监控和分析一个人的情绪变化来辅助医生进行诊断或治疗效果评估。 2. 用户体验研究:在产品设计、广告制作或网站开发过程中,通过观察用户在使用过程中的情绪反应,来优化产品的用户体验。 3. 互动娱乐:在游戏或虚拟现实应用中,根据玩家的情绪状态动态调整游戏难度或故事情节,以增加沉浸感和互动性。

By Ne0inhk
最全java面试题及答案(208道)

最全java面试题及答案(208道)

本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什么区别? * JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java

By Ne0inhk
用 DeepSeek 打造你的超强代码助手

用 DeepSeek 打造你的超强代码助手

DeepSeek Engineer 是啥? 简单来说,DeepSeek Engineer 是一个基于命令行的智能助手。它能帮你完成这些事: * 快速读文件内容:比如你有个配置文件,直接用命令把它加载进助手,后续所有操作都可以基于这个文件。 * 自动改文件:它不仅能提建议,还可以直接生成差异表(diff),甚至自动应用修改。 * 智能代码生成:比如你让它生成代码片段,它会按照指定格式和规则直接返回。 更重要的是,这一切都是通过 DeepSeek 的强大 API 来实现的。想象一下,你有个贴身助手,不仅能听懂你的代码需求,还能直接动手帮你写! 核心功能拆解 我们先来看 DeepSeek Engineer 的几个核心能力,让你更好地理解它的强大之处。 1. 自动配置 DeepSeek 客户端 启动这个工具时,你只需要准备一个 .env 文件,里面写上你的 API Key,比如: DEEPSEEK_API_

By Ne0inhk
解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操作系统 2、镜像准备 三、安装 1、安装Docker 2、启动Ollama 3、拉取Deepseek大模型 4、启动Deepseek  一、引言 1、什么是Docker Docker:就像一个“打包好的App” 想象一下,你写了一个很棒的程序,在自己的电脑上运行得很好。但当你把它发给别人,可能会遇到各种问题: * “这个软件需要 Python 3.8,但我只有 Python 3.6!

By Ne0inhk