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」。