使用JdbcTemplate的RowCallbackHandler的流行度

时间:2013-05-22 16:12:02

标签: java spring

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

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

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


修改:有些人要求提供我的数据模型。好的,有一个nodes表和一个edges表。如果节点A和B之间存在边缘,则该边缘可以表示两件事:

  1. A和B是相互作用的不相交节点
  2. A是B的成员,反之亦然
  3. 在第二种情况下,我需要将这些组节点添加到列表中。它们还不能映射到Java bean,因为它们不表示不相交节点之间的交互。

    或许我应该做的是拥有2个查询,一个检索case(1),另一个检索case(2)。 Case(1)可以映射到Java bean,case(2)映射到List。

    如果这确实更好,那么RowCallbackHandler可能是一个糟糕的代码味道?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以创建一个由您的bean对象和列表组成的新类。然后在ResultSetExtractor或RowCallbackHandler中填充它。然后您的返回类型可以从void更改为新类的类型。