我想将 Dao 模式与 hibernate orm 结合使用,但我对如何创建数据传输对象感到困惑。
例如,如果我有一个用户表和订单表,一对多关系。 使用 hibernate,我的 UserDTO 包含所有用户列 + OrdersDTO。 OrdersDTO 将由 hibernate 填充并延迟加载,因此,如果我说 UserDao.getUserByPk(1),我会获取所有用户数据及其所有订单,然后将此对象发送到 View 。
如果我将 Hibernate 更改为 JDBC,那么我会遇到问题,如果我说 UserDao.getUserByPk(1) 我只获得用户数据,对于他的订单我需要执行 OrdesDao.getOrdersByUserId(1),但在我看来我有只有一个对象。
所以我的问题是如何使用 ORM 功能(例如延迟加载),但同时如果我更改数据源,我的业务逻辑不会受到影响。
谢谢
最佳答案
您必须创建一个“dao”抽象层才能执行此操作。包含业务逻辑的服务层应该调用 dao 层来获取任何 DTO。 dao 层应包含契约/接口(interface)和实现(基于 Hibernate、JDBC 或其他)。您应该能够通过一些外部化配置来配置您的 dao 实现选择(以防止在 dao 层实现选择发生任何更改后重新编译)。
View 层 > 服务层 > Dao 层(HibernateImpl 或 JdbcImpl 等)> 从 db 获取数据到 DTO 并将其返回给调用者。
关于java - ORM 和 DAO 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17634604/