JPA是啥

JPA(Java Persistence API) 是 Java 里的一套 「用对象操作数据库」的标准规范 ,不是某一个具体库,更像 官方定的规则


通俗理解

不用满屏写:

sql 复制代码
SELECT id, username FROM users WHERE id = ?

而是写 Java 类(实体) + 方法调用,由框架帮你生成 SQL、把行映射成对象。

复制代码
数据库表 users  ↔  Java 类 User
一行记录        ↔  一个 User 对象

这就是 ORM(对象关系映射),JPA 规定「在 Java 里 ORM 该怎么写」。


和 Spring 的关系

日常说的「Spring 操作数据库」,多半是:

复制代码
JPA(规范/接口)
    ↓ 实现
Hibernate(最常用的实现,类似「真正干活的引擎」)
    ↓ 再包一层
Spring Data JPA(Spring 提供的简化 API,比如 UserRepository)

所以你面试/文档里常看到 Spring Data JPA,底层还是 JPA 思想。


长什么样(概念)

java 复制代码
@Entity
@Table(name = "users")
public class User {
    @Id
    private Long id;

    private String username;
}

public interface UserRepository extends JpaRepository<User, Long> {
    // 自动有 save、findById、findAll...
    List<User> findByUsername(String username);  // 按方法名生成查询
}
  • @Entity:这是个表对应的类(像 TypeORM 的 @Entity
  • JpaRepository:不用自己写很多 CRUD

和你已学东西的对应

你熟悉的 Java 里类似
Prisma schema.prisma + prisma.user.findMany 实体类 + Repository / JPA 查询
TypeORM @Entity + Repository 几乎就是 JPA 那套在 TS 里的翻版
mysql2 手写 SQL JdbcTemplate / MyBatis(不算 JPA,更偏手写 SQL)
表行 → Vo 实体 Entity → 有时再转 DTO

JPA vs MyBatis(Java 里另一派)

JPA(Hibernate) MyBatis
风格 对象为主,SQL 多由框架生成 SQL 自己写,框架帮你映射
像你项目里的 Prisma / TypeORM mysql2 手写 SQL

国内 Java 项目 两种都很多,JPA 更「面向对象」,MyBatis 更「SQL 可控」。


一句话

JPA = Java 里「表当类、用 Repository 查库」的标准做法;真正常用的是 Hibernate + Spring Data JPA。

你若转 Java 后端,JPA 是必学概念之一;你现在的 Prisma/分层经验能用上,只是从「生成 Client」换成「实体 + Repository」。