如何使用 DBUtils 查询 Set<MyObject>?
Posted
技术标签:
【中文标题】如何使用 DBUtils 查询 Set<MyObject>?【英文标题】:How do I query for a Set<MyObject> using DBUtils? 【发布时间】:2018-09-06 01:47:56 【问题描述】:查看DBUtils API 文档,我看不到是否可以查询集合。
我应该使用哪个 ResultSetHandler 实现来查询对象集?
【问题讨论】:
显然我可以收到 List 并在将此 List 转换为 set 但... 【参考方案1】:我认为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 Column-Bean 属性映射,而 toBeanList
method(由 BeanListHandler 使用)在每个列表中仅查找一次此映射。
有一个 BeanMapHandler
返回 HashMap 并且它在内部使用 toBean
方法,因此我认为对于 Sets/Maps 我们必须依赖 toBean
方法或编写自定义 RowProcessor
。
【讨论】:
以上是关于如何使用 DBUtils 查询 Set<MyObject>?的主要内容,如果未能解决你的问题,请参考以下文章