Skip to content

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文库设计文档** — 文库设计总纲

Knowledge4J — Java 知识库