我正在尝试重写一堆 DAO,这里是设置:
- 只有普通的 JDBC(没有 JPA、ORM)
- 没有使用接口
- 在插入对象之前进行大量检查
- 业务对象是强链接的
我的主要问题是:如何持久化/检索由多个其他对象组成的业务对象?例如,我的 CustomerDAO 是否知道 AddressDAO 并从那里检索客户地址?
我正在尝试重写一堆 DAO,这里是设置:
我的主要问题是:如何持久化/检索由多个其他对象组成的业务对象?例如,我的 CustomerDAO 是否知道 AddressDAO 并从那里检索客户地址?
只有普通的 JDBC(没有 JPA、ORM) 业务对象是强链接的
不确定为什么在希望链接业务对象时不想使用 JPA,但至少您应该使用 Spring JDBC 模板,它可以让您从一些样板代码中解脱出来。
关于其他约束,我会这样做:
DAO
方法并在支持的 Spring JDBC 模板中实现它们DAOImpl
。到处使用 DAO 并注入 DAOImpl。我的两分钱!
您可以考虑使用JOOQ。它不是 JPA,但它可以很容易地用作替代解决方案。它足够轻巧。它还提供了一个逆向工程工具,用于将您的数据库实体构建为 DAO 对象。
我已将 JOOQ 嵌入到应用程序经过精心设计的相关情况中。我没有使用它的 DAO 功能,而是将其用作更高层以避免与 JDBC 层混淆。
干杯!
复合实体是 DAO 之上的一层。如果要移除所有耦合,DAO 持久化的域对象应该是扁平的,没有关系。请参阅核心 J2EE 模式 CompositeEntity。
此外,最好不要通过将查找器放在另一个中来在 DAO 之间引入耦合。例如:
AddressDAO.findForCustomerId(id);
不如使用第三个 DAO 来管理关系。IE:
CustomerAddressRelDAO.findAddressForCustomer(id);
如果您使用关系 DAO,则地址和客户都不会相互依赖(或了解)彼此。