JavaEE体系结构——Are DAO';当使用像JPA2这样的ORM时,仍然建议使用什么?
如果我使用的是像JPA2这样的ORM,我的实体映射到我的数据库,那么我还应该使用DAO吗?看起来开销要大得多 例如,我需要维护三个额外的包:JavaEE体系结构——Are DAO';当使用像JPA2这样的ORM时,仍然建议使用什么?,java,jakarta-ee,dao,jpa-2.0,architecture,Java,Jakarta Ee,Dao,Jpa 2.0,Architecture,如果我使用的是像JPA2这样的ORM,我的实体映射到我的数据库,那么我还应该使用DAO吗?看起来开销要大得多 例如,我需要维护三个额外的包: 一个指定我的域对象(它几乎映射了我的实体对象): 一个包含指定我的DAO方法的接口 public interface EmployeeDAO { public void addEmployee(Employee employee); public Employee getEmployeeById(long id); ... }
public interface EmployeeDAO {
public void addEmployee(Employee employee);
public Employee getEmployeeById(long id);
...
}
public EmployeeJpaDAO implements EmployeeDAO {
interface method implementations here
....
private method that transform my Employee entity into my Employee domain object
}
@Stateless
public class EmployeeEjb {
@PersistenceContext(unitName = "employee")
private EntityManager manager;
public Employee getEmployeeById(long id) {
return manager.createNamedQuery(Employee.GetEmployeeById).getResultList();
}
...
}
这里没有中间立场吗?有没有人遇到过一个体系结构或实现了一个体系结构,该体系结构满足了我上面提到的DAO层的一些好处(最重要的是业务逻辑的单元可测试性),但不涉及实现DAO层所涉及的所有开销
感谢您的任何建议和/或建议!我真的很好奇,看看有些人对此有什么想法
如果我使用的是像JPA2这样的ORM,我的实体映射到我的数据库,那么我还应该使用DAO吗?看起来开销要大得多
是的。显然,JavaEE不鼓励在使用JPA时使用该模式(JPA已经提供了该模式的标准化实现,在DAO后面屏蔽它没有多大价值)。我发现在这种情况下刀是反的
所以对于简单的案例(实际上,大多数案例),我很乐意跳过DAO,我对此没有问题。对于更复杂的情况(例如使用存储过程、平面文件时),我会使用它。换句话说,这取决于,如中所总结的。另见以下相关问题:
相关问题
public EmployeeJpaDAO implements EmployeeDAO {
interface method implementations here
....
private method that transform my Employee entity into my Employee domain object
}
Noooo,您当然不想将DAO实现为会话Bean:
- 您不希望创建与表一样多的(池)会话Bean(极大地浪费资源)
- 您不希望将会话bean链接到任何地方,也不希望重现过去的错误,这是一种已知的不好的做法,不能很好地扩展
EntityManager
。它适合我,我很乐意写更少的代码
更多资源
例如,假设我有下一个问题:出于某种奇怪的原因,我可以在数据库中插入一个新的客户机?。我应该从哪里开始测试?。答:ClientDao如果存在,如果不存在,那么祝你在别处找到好运。谢谢你提供的信息性回复。我问了另外一个问题,如果您想了解一下,在使用带有DAO的JPA时,如何对EJB进行单元测试:D为什么将DAOs实现为SLSB是一种关于可伸缩性的糟糕做法?哪些问题与此相关,应用程序会以何种“规模”出现此类问题?我害怕在JavaEE环境中使用Spring,这也会重现过去的一个大错误…@Pascal我知道你的答案已经好几年了,