0

很多时候我需要 RowCallbackHandler,因为在处理结果集时,我不会将每一行映射到单一类型,也不会将每个结果集映射到单一数据结构。相反,我可以将大多数行映射到特定的 Java bean,并将其余行添加到列表中以进行后处理。

在这些情况下,我需要一个返回类型为 void 的回调,而唯一满足这一点的回调是 RowCallbackHandler。

但是我没有遇到很多这样的例子,而且我不得不承认,使用 JDBC 并循环遍历 ResultSet 在美学上比使用笨重的 Spring 回调更好。RowCallbackHandler 比我想象的更常见吗?我很好奇人们要说什么...


编辑:有些人要求我的数据模型。好的,有一张nodes桌子和一张edges桌子。如果节点 A 和 B 之间有一条边,则该边可以表示两件事:

  1. A 和 B 是互不相交的节点
  2. A 是 B 的成员,反之亦然

在第二种情况下,我需要将这些组节点添加到列表中。它们还不能映射到 Java bean,因为它们不表示不相交节点之间的交互。

相反,也许我应该做的是有 2 个查询,一个检索案例 (1),另一个检索案例 (2)。案例 (1) 可以映射到 Java bean,案例 (2) 可以映射到列表。

如果这确实更好,那么可能RowCallbackHandler是不好的代码气味?

4

2 回答 2

1

如果您想要处理整个结果集而不返回任何内容,只需使用 a ResultSetExtractor<Void>(以及将其作为参数的 JdbcTemplate 方法之一)。

于 2013-05-22T16:17:03.587 回答
0

You can create a new class that's composed of your bean objects(s), plus the list. Then fill it in a ResultSetExtractor or RowCallbackHandler. Then your return type can change from void to the new class' type.

于 2013-05-22T16:45:08.250 回答