第 6 章 [总结] 继往开来:回顾与展望

第 6 章 [总结] 继往开来:回顾与展望

摘要: 恭喜您!从 JDBC 的困境出发,到亲手搭建并完善一个银行应用,您已经系统地掌握了 MyBatis 从入门到进阶的核心技术。我们一起探索了 CRUD 操作动态 SQL复杂关系映射性能优化 以及 生态工具。本章将不再引入新的功能,而是通过 学习路径回顾核心知识速查未来技术展望 三个部分,来为您梳理知识体系,巩固学习成果,并清晰地规划出下一步的学习路径——拥抱 Spring Boot,让 MyBatis 在现代化企业级开发中发挥出更大的威力。


6.1. [回顾] 我们的 MyBatis 学习之旅

让我们通过一个时间线,回顾一下我们是如何一步步构建并完善我们的应用,以及在每个阶段掌握的关键技能。

2025

第五章: 生产力

  • 我们学习了如何集成 PageHelper 插件,用两行代码实现了优雅的物理分页。
  • 我们掌握了 MyBatis Generator,根据数据库表一键生成了所有基础的数据访问层代码,极大提升了开发效率。

第四章: 扩展性

  • 我们深入学习了 <resultMap>,并用 <association><collection> 成功处理了客户与账户间的“一对多/多对一”关联关系。
  • 我们揭示了 N+1 查询问题,并通过 延迟加载一、二级缓存 对应用进行了性能优化。

第三章: 健壮性

  • 我们为转账业务引入了 事务控制,通过改造 SqlSessionUtil 并结合 ThreadLocal 模式,确保了业务操作的原子性。
  • 我们为了满足报表需求,全面学习了 MyBatis 最强大的 动态 SQL 功能,包括 <if>, <where>, <foreach> 等标签。

第二章: 核心

  • 我们实现了应用的第一个核心功能“转账”,并在此过程中掌握了完整的 CRUD 操作。
  • 我们学习并采用了 Mapper 代理模式,并对比了 XML注解 两种实现方式。
  • 我们厘清了 @Param 注解的用法,以及 #{}${} 的本质区别与安全风险。

第一章: 奠基

  • 我们理解了 MyBatis 的价值,并从零开始,利用现代化工具库搭建了第一个 MyBatis 项目。
  • 我们掌握了 MyBatis 的基本工作流,配置了核心文件,并成功执行了第一次数据库查询。

6.2. [核心] 关键配置与最佳实践速查

为了方便您日后查阅,这里将整个学习过程中的核心配置和最佳实践汇总成速查表。

1. mybatis-config.xml 核心标签

标签功能描述
settings全局配置开关。例如:mapUnderscoreToCamelCase (驼峰映射), lazyLoadingEnabled (延迟加载)。
typeAliases为 POJO 类起别名,简化 XML 中的书写。
plugins注册插件,例如 PageHelper 分页拦截器。
environments配置数据库环境(数据源、事务管理器)。
mappers注册 Mapper 映射文件。

2. Mapper XML 核心标签

标签功能描述
<select>定义查询操作。
<insert>定义插入操作,可通过 useGeneratedKeys 获取自增主键。
<update>定义更新操作。
<delete>定义删除操作。
<resultMap>(核心) 定义复杂的列-属性映射关系。
<association>(核心) 用于处理“多对一”关联关系。
<collection>(核心) 用于处理“一对多”关联关系。
<if> <where>(核心) 用于构建动态条件的查询语句。
<foreach>(核心) 用于遍历集合,实现 IN 子句等批量操作。

3. 最佳实践清单

  • 开发模式: 始终使用 Mapper 代理模式(接口 + XML/注解)进行开发。
  • 参数安全: 永远优先使用 #{} 作为参数占位符以防止 SQL 注入。
  • 事务控制: 事务应在 Service 层 进行管理,以确保业务的原子性。在非 Spring 环境下,使用 ThreadLocal 模式管理 SqlSession 是保证事务统一的最佳实践。
  • 动态查询: 充分利用动态 SQL 标签(<where>, <set>, <foreach>)来构建灵活、健壮的 SQL。
  • 性能考量: 对于关联查询,优先考虑使用 延迟加载 来避免 N+1 问题。对于高频访问的数据,合理开启 二级缓存

6.3. [展望] 下一步:拥抱 Spring Boot

我们本次学习中手动编写的 SqlSessionUtil 工具类、以及在 Service 层手动控制事务的 try-catch-finally 代码块,都是为了让您深刻理解 MyBatis 的底层工作原理。在现代化的企业级开发中,这些工作几乎都由 SpringSpring Boot 框架自动完成了。

Spring Boot 会为我们简化什么?

  • 自动化配置: 无需再编写 mybatis-config.xml。数据库连接、驼峰映射、插件注册等都可以在 application.propertiesapplication.yml 中通过几行配置完成。
  • 依赖管理: 只需引入一个 mybatis-spring-boot-starter,所有相关的依赖都会被自动管理。
  • 对象管理: SqlSessionFactorySqlSession 的创建、管理、关闭都由 Spring 容器自动完成。Mapper 接口可以直接通过 @Autowired 注解注入到 Service 层使用。
  • 声明式事务: 这是最重要的简化。我们不再需要手动 commitrollback

对比一下我们的手动事务代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 我们的手动事务代码
public void transfer(...) {
SqlSession sqlSession = SqlSessionUtil.openSession();
try {
// ... 业务逻辑 ...
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
throw e;
} finally {
SqlSessionUtil.closeSession();
}
}

在 Spring Boot 中,它会简化成这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class AccountServiceImpl implements AccountService {

@Autowired // Mapper 对象由 Spring 自动注入
private AccountMapper accountMapper;

@Transactional // 只需一个注解,Spring 就会自动管理事务
@Override

public void transfer(...) {
// ... 纯粹的业务逻辑,无需任何 SqlSession 操作 ...
}
}

可以看到,框架帮助我们处理了所有繁琐的底层细节,让我们可以更专注于业务逻辑本身。

总结: 您已经为 MyBatis 打下了坚实的基础。您的下一个目标,就是学习如何将 MyBatis 整合进 Spring Boot 中。有了现在对底层原理的深刻理解,您在学习整合开发时将会事半功倍,游刃有余。祝您在技术的道路上不断精进,一帆风顺!