我经常需要RowCallbackHandler,因为在处理结果集时,我不会将每一行映射到单个类型,也不会将每个结果集映射到单个数据结构。相反,我可以将多数行映射到特定的Java bean,并将余数添加到列表中以进行后处理。
在这些情况下,我需要一个返回类型为void的回调,唯一满足此要求的回调是RowCallbackHandler。
但我没有遇到很多这方面的例子,我不得不承认,使用JDBC并循环使用ResultSet比使用笨重的Spring回调更美观。 RowCallbackHandler比我想象的更常见吗?我很好奇人们要说什么......
修改:有些人要求提供我的数据模型。好的,有一个nodes
表和一个edges
表。如果节点A和B之间存在边缘,则该边缘可以表示两件事:
在第二种情况下,我需要将这些组节点添加到列表中。它们还不能映射到Java bean,因为它们不表示不相交节点之间的交互。
或许我应该做的是拥有2个查询,一个检索case(1),另一个检索case(2)。 Case(1)可以映射到Java bean,case(2)映射到List。
如果这确实更好,那么RowCallbackHandler
可能是一个糟糕的代码味道?
答案 0 :(得分:1)
如果您想要处理整个结果集而不返回任何内容,只需使用ResultSetExtractor<Void>
(以及其中一个JdbcTemplate方法将其作为参数)。
答案 1 :(得分:0)
您可以创建一个由您的bean对象和列表组成的新类。然后在ResultSetExtractor或RowCallbackHandler中填充它。然后您的返回类型可以从void更改为新类的类型。