在Spring中延迟加载DTO字段

All*_*nde 6 java spring lazy-loading jdbc

我有一个使用Spring的项目,并分解为几十个DAO和相关的DTO.我正在使用JdbcTemplate,但没有其他,因为它正是我很满意的抽象级别.

我目前正在我的DTO上执行延迟加载,在其getter中放置一些相当毛茸茸的代码.

基本样板逻辑是:1.如果field不为null,则返回其值并退出2.联系相应的DAO并获取相关的DTO 3.将它们存储到下一次.

它工作正常,除了我的低DTO与一大堆DAO耦合,并不是那么POJOey.

如果我将逻辑放在DAO中会出现另一个代码气味,因为它将为其DTO和延迟加载处理CRUD,并且据我所知它对象应该只有一个责任.

我希望有一个相对简单的Spring方法,我可以使用它在DAO和DTO之间注入一个Lazy Loader对象来实现这一点,但任何其他解决方案都适用于我.

有任何想法吗?

Jim*_*ows 4

将 DAO 包裹在 DAO 周围会更容易……这取决于您想要引入多少模型。DTO 通常不用于将一对多作为两个或多个单独的数据库/dao 调用。在这种情况下,您确实需要一个 ORM。既然你在寻找 dao 答案......

没有什么可以阻止您将 DAO 连接在一起以提供一个 DTO。将 DTO 连接到 DAO 会更容易。它并不是真正的服务层,它只是 DAO 的构建块。所以您可能有一个 PersonDao 和一个 TelephoneNumberDao。一个人可以有多个电话号码,因此您也可以拥有 PersonModelDAo,它在幕后使用 PersonDao 和 TelephoneNumberDao 来完成工作。

或者,避免整个问题,并且不要尝试在 DTO 级别映射人员和电话号码之间的 1-N。只需让您的 UI 对正确的 DAO 进行正确的调用即可。实际上,我在使用 DTO 时更喜欢这一点。