06 — 数据访问
定位: Spring 多层级数据访问抽象——从 JPA 到 JDBC 的完整方案 面试高频度: ⭐⭐⭐⭐
一、板块在体系中的位置
+----------------------------------------------------+
| 数据访问在 Spring 体系中的位置 |
| |
| 01. IoC 容器 -> 03. 事务管理 |
| | |
| v |
| 06. 数据访问 (本板块) |
| +-------------------------------------------+ |
| | JPA / Hibernate / JdbcTemplate / MyBatis | |
| +-------------------------------------------+ |
| | |
| v |
| 05. Spring Boot (自动配置数据源 + 事务管理器) |
| 08. Spring Cloud (分布式事务 Seata) |
+----------------------------------------------------+二、知识全景图
+----------------------------------------------------+
| 数据访问核心知识体系 |
| |
| +----------------------------------------------+ |
| | 1. Spring Data JPA | |
| | Repository -> CrudRepository -> JpaRepository| |
| | 方法命名查询 + @Query 自定义查询 | |
| +----------------------------------------------+ |
| | |
| +----------------------------------------------+ |
| | 2. JPA 高级与优化 | |
| | N+1 问题 + @EntityGraph | |
| | 关联映射 + JPA缓存 | |
| +----------------------------------------------+ |
| | |
| +----------------------------------------------+ |
| | 3. JdbcTemplate 与多数据源 | |
| | JdbcTemplate / JdbcClient | |
| | 多数据源配置实战 | |
| +----------------------------------------------+ |
+----------------------------------------------------+三、子专题导航
| # | 主题 | 面试频率 | 核心内容 |
|---|---|---|---|
| **06.1-Spring Data JPA** | ⭐⭐⭐⭐ | Repository 接口体系、方法命名查询关键字、@Query 自定义查询、JPA核心注解 | |
| **06.2-JPA高级与优化** | ⭐⭐⭐⭐⭐ | N+1问题原理、@EntityGraph vs JOIN FETCH、关联映射、JPA一级/二级缓存 | |
| **06.3-JdbcTemplate与多数据源** | ⭐⭐⭐ | JdbcTemplate/JdbcClient 使用、多数据源配置实战 |
四、核心考点速记
考点 1:N+1 问题
List<Post> posts = postRepository.findAll(); // 1条SQL
for (Post post : posts) {
post.getComments().size(); // N条SQL
}
// 总共 1+N 条 SQL解法:@EntityGraph(声明式) / JOIN FETCH(命令式) / @BatchSize(折中)
考点 2:@ManyToOne 默认 Fetch 策略
默认是 EAGER!建议显式设置为 LAZY 避免 N+1。
考点 3:JPA 一级缓存 vs 二级缓存
一级缓存:EntityManager 级别,事务内有效,自动管理 二级缓存:SessionFactory 级别,跨事务共享,需第三方实现如 Ehcache
📚 相关板块
- **事务管理** — JPA 事务通过 JpaTransactionManager 管理
- **Spring Boot** — 自动配置 DataSource 和 JPA
📚 相关链接
- **Spring文库设计文档** — 文库设计总纲