gpt4 book ai didi

java - DAO 层可以返回 JDBC ResultSet (Java)

转载 作者:行者123 更新时间:2023-12-01 22:58:33 25 4
gpt4 key购买 nike

我的Java项目有一个使用Java API JDBC的DAO层; JDBC 返回 ResultSets 以从数据库获取信息。

考虑到分层的编程范例,将 ResultSet 对象返回到业务层并提取信息是否正确?

根据层定义,业务层有责任将信息包装在域对象(bean 等)内。但另一方面,它还没有看到 DAO 组件。

我附上这段代码来展示我的范例:

    public static Hashtable<String, TreeSet<String>> getCodesByEditorial(Vector<Integer> familiesVector) throws Exception {
DriverManager.registerDriver((Driver) Class.forName("ianywhere.ml.jdbcodbc.IDriver").newInstance());
Connection con = DriverManager.getConnection("jdbc:odbc:DSN=DBLIB");
String sqlQuery =
"SELECT re.codigo, li.editorial FROM li_li li " +
"LEFT OUTER JOIN tl_recambio re ON li.codigo = re.codigo " +
"WHERE li.editorial IS NOT NULL AND re.familia IN (" + buildFamilies(familiesVector) + ")" ;
PreparedStatement ps = con.prepareStatement(sqlQuery);
ResultSet res = ps.executeQuery();

//THIS CODE SHOULD BE INTO DAO LAYER????
Hashtable<String, TreeSet<String>> codesHashTree = new Hashtable<String, TreeSet<String>>();
while (res.next()) {
String code = res.getString("CODIGO");
String editorial = res.getString("EDITORIAL");
if (editorial != null) {
TreeSet<String> bookTreeSet = codesHashTree.get(editorial);
if (bookTreeSet == null) {
bookTreeSet = new TreeSet<String>();
}
bookTreeSet.add(code);
codesHashTree.put(editorial, bookTreeSet);
}
}
con.close();
return codesHashTree;
}

最佳答案

不,业务层不应该处理ResultSets。该层的职责是处理业务逻辑,与数据的来源(在本例中为数据库)无关。

处理此问题的一种方法是从数据源层返回数据传输对象 (DTO),然后在业务层中处理它们。这样,数据可以来自多个来源(数据库、平面文件、Web 服务、其他集成),并且业务层不需要更改。

关于java - DAO 层可以返回 JDBC ResultSet (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com