如何使用DBUtils查询Set <myobject>?

时间:2018-03-27 15:07:17

标签: java apache-commons-dbutils

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

我应该将ResultSetHandler的哪个实现用于查询对象集?

1 个答案:

答案 0 :(得分:0)

我不认为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方法(由BeanListHandler使用)每个列表只找到一次该映射。

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