代码对比
✕ Jakarta EE 8+
@PersistenceContext
EntityManager em;
public User findById(Long id) {
return em.find(User.class, id);
}
public List<User> findByName(String name) {
return em.createQuery(
"SELECT u FROM User u WHERE u.name = :name",
User.class)
.setParameter("name", name)
.getResultList();
}
public void save(User user) {
em.persist(user);
}
✓ Jakarta EE 11+
@Repository
public interface Users extends CrudRepository<User, Long> {
List<User> findByName(String name);
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
零样板代码
声明接口;容器生成完整的 DAO 实现。
表达性查询
方法名成为查询:findByLastNameOrderByFirstName。
类型安全
方法签名在编译时验证参数和返回类型。
旧方式
JPA EntityManager
现代方式
Jakarta Data Repository
自 JDK
21
难度
中级
JDK 支持
JPA 与 Jakarta Data
可用
自 Jakarta EE 11 / Java 21 起可用(2024 年)
工作原理
Jakarta Data(Jakarta EE 11)将数据访问变为纯接口声明。容器生成完整的 DAO 实现——无需 EntityManager 样板、查询构建器或手动事务。
相关文档