EBean ORM
ebean;轻量 ORM 选型。
25 分钟
EBean ORM
Hibernate 功能全、生态大;EBean 走轻量路线——注解接近 JPA,运行时无字节码增强代理,查询 API 偏 Active Record 风格。本课帮你在 orm-essentials 的 JPA 基础上多一个选型,并与 jev-hibernate 对照,再决定是否上 spring-boot-essentials 的全家桶。
学习目标
- 用 EBean 定义实体并完成 CRUD 与简单关联查询
- 对比 EBean 与 Hibernate 在启动速度、API 风格、Spring 集成上的差异
- 判断「小服务 / 工具项目」何时选 EBean 而非 Spring Data JPA
实体与 Database 入口
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;
String isbn;
String title;
@ManyToOne
Author author;
}
// 启动时注册实体包
Database database = DatabaseFactory.create(new DatabaseConfig()
.setDataSource(hikariDataSource)
.addClass(Book.class)
.addClass(Author.class));
EBean 也可通过 ebean-spring-txn 与 Spring 事务对齐,但社区体量小于 Hibernate。
CRUD 与 Query API
public class BookService {
private final Database db;
public BookService(Database db) {
this.db = db;
}
public Book findByIsbn(String isbn) {
return db.find(Book.class)
.where()
.eq("isbn", isbn)
.findOne();
}
public void save(Book book) {
db.save(book); // insert 或 update 由 id 是否为零推断
}
public List<Book> findByAuthorCountry(String country) {
return db.find(Book.class)
.fetch("author")
.where()
.eq("author.country", country)
.findList();
}
}
fetch("author") 类似 Hibernate 的 join fetch,一次拉齐关联,避免 N+1。
与 Hibernate 选型对照
| 维度 | Hibernate / JPA | EBean |
|---|---|---|
| 标准 | Jakarta Persistence | 自有 API,JPA 注解兼容子集 |
| Spring 集成 | 一等公民 | 需额外 starter,文档较少 |
| 学习曲线 | 概念多(Session、Cache) | 上手快,API 直观 |
| 适用 | 中大型业务、Spring 生态 | CLI 工具、微服务原型、非 Spring 项目 |
若团队已标准化 Spring Boot + JPA,生产环境仍以 Hibernate 为主;EBean 适合 快速原型 或 脱离 Spring 的独立 JVM 程序。