查看DBUtils API文档,我看不到是否有可能查询Set。
我应该对查询Set对象使用哪个ResultSetHandler实现?
最佳答案
我认为Set
没有默认实现。您可以为Set
创建通用处理程序,如下所示。
public class SetHandler<T> implements ResultSetHandler<Set<T>> {
private final RowProcessor rp = new BasicRowProcessor();
private final Class<T> type;
public SetHandler(Class<T> type) {
this.type = type;
}
@Override
public Set<T> handle(ResultSet rs) throws SQLException {
Set<T> set = new HashSet<>();
while (rs.next()) {
set.add((T) this.rp.toBean(rs,type));
}
return set;
}
}
缺点是
toBean
方法尝试为ResultSet中的每一行查找ResulSet列Bean属性映射,而toBeanList
方法(由BeanListHandler使用)对每个列表仅查找一次此映射。有一个
BeanMapHandler
返回HashMap,它在内部使用toBean
方法,因此我认为对于Sets / Maps,我们必须依靠toBean
方法或编写自定义的RowProcessor
。