【问题标题】:How do I query for a Set<MyObject> using DBUtils?如何使用 DBUtils 查询 Set<MyObject>?
【发布时间】:2018-09-06 01:47:56
【问题描述】:

查看DBUtils API 文档,我看不到是否可以查询集合。

我应该使用哪个 ResultSetHandler 实现来查询对象集?

【问题讨论】:

  • 显然我可以收到 List 并在将此 List 转换为 set 但...

标签: java apache-commons-dbutils


【解决方案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 属性映射,而 toBeanListmethod(由 BeanListHandler 使用)在每个列表中仅查找一次此映射。

有一个 BeanMapHandler 返回 HashMap 并且它在内部使用 toBean 方法,因此我认为对于 Sets/Maps 我们必须依赖 toBean 方法或编写自定义 RowProcessor

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多