CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
ORM 与数据库设计/课时/JPA 与 Hibernate
RawBlame
课时目录12 节

ORM 与数据库设计

  1. 01ORM 是什么
  2. 02范式与规范化
  3. 03ER 模型
  4. 04JPA 与 Hibernate
  5. 05MyBatis
  6. 06Spring Data 家族
  7. 07Schema 迁移
  8. 08N+1 与抓取策略
  9. 09MariaDB 与 MySQL
  10. 10ORM 与事务
  11. 11反模式
  12. 12综合练习

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

JPAJDBC / sb-jdbc
对象导航、级联显式 SQL
自动脏检查手动 UPDATE
学习曲线SQL 必须熟练

相关课程

  • sql-select — 理解生成的 SQL
  • orm-mybatis
  • pg-spring — PG 数据源换驱动即可
  • 练习

    • 为 cf_lesson 写 Entity,含 @ManyToOne Track track
    • 写 findByTrackIdOrderByOrderIndexAsc 并预测 SQL
    • 对比 JPA save() 与 JDBC PreparedStatement

    小结

    Entity 描述表结构,Repository 描述访问方式。 下一课看 MyBatis 如何「SQL 优先」。

    加载本节练习…
    ← 上一课ER 模型下一课 →MyBatis