JPA 与 Hibernate
Entity、Repository;对照 sb-jpa。
40 分钟
JPA 与 Hibernate
JPA 是 Java 持久化规范;Hibernate 是最常用的实现。Spring Boot 通过 Spring Data JPA 把 Entity + Repository 变成可运行的 CRUD。
学习目标
- 定义
@Entity映射cf_track - 使用
JpaRepository与派生查询 - 理解与 sb-jpa 的衔接
Entity 映射 cf_track
@Entity
@Table(name = "cf_track")
public class Track {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true, length = 64)
private String slug;
@Column(nullable = false, length = 128)
private String title;
@Column(length = 32)
private String category;
@OneToMany(mappedBy = "track", fetch = FetchType.LAZY)
private List<Lesson> lessons = new ArrayList<>();
}
GenerationType.IDENTITY 对应 MySQL AUTO_INCREMENT。
Repository
public interface TrackRepository extends JpaRepository<Track, Long> {
Optional<Track> findBySlug(String slug);
List<Track> findByCategoryOrderBySortOrderAsc(String category);
}
Spring Data 根据方法名生成 SQL——适合简单查询;复杂 SQL 转 MyBatis 或 @Query。
生命周期(直觉)
new Entity → persist → managed(在持久化上下文内)
↓ flush
INSERT/UPDATE 发往 MySQL
↓ detach / 事务结束
脱离上下文,再改字段不会自动 UPDATE
@Transactional 边界见 sb-transaction、orm-transactions。
JPA vs 手写 JDBC
| JPA | JDBC / sb-jdbc |
|---|---|
| 对象导航、级联 | 显式 SQL |
| 自动脏检查 | 手动 UPDATE |
| 学习曲线 | SQL 必须熟练 |
相关课程
- sql-select — 理解生成的 SQL
- orm-mybatis