Java 将数据从DAO传输到服务层的有效方法

Java 将数据从DAO传输到服务层的有效方法,java,jdbc,Java,Jdbc,在我们的项目中,我们使用DAO层访问数据库中的数据,它只需使用PreparedStatement查询数据库,并将ResultSet返回给服务层。我知道将ResultSet返回到服务层是个坏主意,因为在高效地关闭ResultSet,PreparedStatement,连接时会出现许多复杂情况。同样,最好的方法是将数据从DAO层填充到DTO,并在服务层中从DTO访问数据,但我们的代码编写为这样,即只有一种通用方法用于查询数据库中的数据,并返回ResultSet。此方法是从服务层的多个位置调用的,我们

在我们的项目中,我们使用DAO层访问数据库中的数据,它只需使用
PreparedStatement
查询数据库,并将
ResultSet
返回给服务层。我知道将
ResultSet
返回到服务层是个坏主意,因为在高效地关闭
ResultSet
PreparedStatement
连接时会出现许多复杂情况。同样,最好的方法是将数据从DAO层填充到DTO,并在服务层中从DTO访问数据,但我们的代码编写为这样,即只有一种通用方法用于查询数据库中的数据,并返回
ResultSe
t。此方法是从服务层的多个位置调用的,我们无法更改所有位置并将数据写入其中


所以我的问题是,在这种情况下,将数据从DAO返回到服务层的最佳方式是什么?任何建议都很好。

DAO的整个要点是将数据访问从服务层抽象出来,即服务层不应该知道(或关心)数据是否来自:

  • 数据库
  • 网络服务
  • 纯文本文件
  • 或者别的什么地方
因此,DAOs的任务是将SQL结果转换为DTO(列表)

如果您有一个用于查询数据库的泛型类,它只返回一个
ResultSet
,那么该类不是DAO。它是DAO类使用的帮助器类

似乎您实际上缺少数据访问层,因此要回答您的问题:

将数据从DAO返回到服务层的最佳方式是什么

编写返回DTO的实际DAO类