java - ORM 和 DAO 设计模式

标签 java hibernate orm dao

我想将 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/

相关文章:

java - Selenium:TestNG:测试未并行运行

java - Jaxb。自定义字段命名行为(camelCase 到 underscore_case)

java - 我无法修改我的 boolean 字段?

java - [ibm][db2][jcc][t4][2055][11259] 由于分发协议(protocol)错误而执行失败

java - 使用 cglib 或 javaassist 哪一个

java - 如何使用继承的实体对 REST API 进行建模?

java - 在 Hibernate 中映射多行每项对象

hibernate - NHibernate 中按绝对值排序

java - 在 CrudRepository 中创建 JPQL 查询

python - 如何删除模型中的默认值并添加 alembic 版本?