java - 将数据从 DAO 传输到服务层的有效方法
问题描述
在我们的项目中,我们使用 DAO 层来访问数据库中的数据,它只是使用查询数据库PreparedStatement
并将其返回ResultSet
给服务层。我知道返回ResultSet
服务层是个坏主意,因为在有效关闭ResultSet
,PreparedStatement
时会出现许多复杂情况Connection
。同样,最好的想法是将数据从 DAO 层填充到 DTO 并从服务层中的 DTO 访问数据,但是我们的代码编写为只有一种通用方法可以从数据库中查询数据并返回ResultSe
吨。这个方法是从服务层的几个地方调用的,我们不能改变所有的地方并在那里写DTO。
所以我的问题是,在这种情况下,将数据从 DAO 返回到服务层的最佳方式是什么?任何建议都会很好。
解决方案
DAO 的全部意义在于将数据访问从服务层抽象出来,即服务层不应该知道(或关心)数据是否来自:
- 数据库
- 网络服务
- 纯文本文件
- 或者别的地方
因此,DAO 的工作是将 SQL 结果转换为 DTO 的(列表)。
如果您有一个用于查询数据库的通用类,并且它只返回一个ResultSet
,那么该类不是 DAO。它是 DAO 类使用的辅助类。
似乎您实际上缺少数据访问层,因此回答您的问题:
将数据从 DAO 返回到服务层的最佳方式是什么?
编写返回 DTO 的实际 DAO 类。
推荐阅读
- python - Python 在运行时自动刷新标准输出和标准错误到本地文本文件
- c - 为什么我使用 memcpy() 得到无效写入 (Valgrind)?
- ruby - 红宝石。(健康)状况) ?返回:下一个。返回错误
- python - 打开相对路径并写入
- html - 每次旋转之间暂停动画五秒钟
- matlab - 如何在 Matlab 中使用信号样本的移位版本创建矩阵?
- python - 在 sys.exit(app.exec_()) 之前不显示任何元素
- sml - 在 SML 中实现更快的 Fifo
- java - 负责从 web txt 获取数据的代码行的正确名称是什么?
- reactjs - FirebaseError: Function CollectionReference.add() 要求它的第一个参数是对象类型,但它是:一个函数