Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将DBUtils结果集转换为由更多域对象合成的JavaBean?_Java_Spring_Javabeans_Apache Commons Dbutils - Fatal编程技术网

如何将DBUtils结果集转换为由更多域对象合成的JavaBean?

如何将DBUtils结果集转换为由更多域对象合成的JavaBean?,java,spring,javabeans,apache-commons-dbutils,Java,Spring,Javabeans,Apache Commons Dbutils,我正在Spring框架中创建MVC web应用程序,需要将ApacheDbutils结果集中的行转换为由嵌套对象组成的JavaBean 关于少数几个示例,我发现我创建了这个RowProcessor实现 public class MonthOrderCountHandler extends BasicRowProcessor { @Override public Object toBean(ResultSet rs, Class type) throws SQLException

我正在Spring框架中创建MVC web应用程序,需要将ApacheDbutils结果集中的行转换为由嵌套对象组成的JavaBean

关于少数几个示例,我发现我创建了这个RowProcessor实现

public class MonthOrderCountHandler extends BasicRowProcessor {

    @Override
    public Object toBean(ResultSet rs, Class type) throws SQLException {

        // Year
        Year year = new Year();
        year.setYearNo(rs.getInt("yearNo"));
        year.setYear4(rs.getString("year4"));
        year.setYear2(rs.getString("year2"));

        // Quarter
        Quarter quarter = new Quarter();
        quarter.setQuarter(rs.getInt("quarter"));

        // Month
        Month m = new Month();
        m.setYear(year);
        m.setQuarter(quarter);
        m.setMonthAbbreviation(rs.getString("monthAbbreviation"));
        m.setMonthName(rs.getString("monthName"));
        m.setMonthNo(rs.getInt("monthNo"));

        // Final bean
        MonthOrderCount result = new MonthOrderCount();
        result.setMonth(m);
        result.setOrderCount(rs.getInt("orderCount"));

        return result;

    }
}
问题:我想知道如何在我的DAO对象中使用这个行处理器,以及这个实现是否正确


通常,我会通过以下方式将行转换为JavaBean:

ResultSetHandler<List<MonthOrderCount>> listUrlHandler = new BeanListHandler<>(MonthOrderCount.class);
月班:

public class Month {
    private Quarter quarter;
    private Year year;
    private int monthNo;
    private String monthName;
    private String monthAbbreviation;
}
四分之一班:

public class Quarter {
    private int quarter;
    private String abbreviation;
}
年级:

public class Year {
    private int yearNo;
    private String year2;
    private String year4;
}
编辑:我这样问是因为我的结果如下所示。orderCount变量已正确填充,但在所有实例中月份均为空。但是对我来说最奇怪的是,从来没有调用过toBean()方法

2013-03-10 17:09:46信息图表数据服务:29- [MonthOrderCount{month=null,orderCount=1863}, MonthOrderCount{month=null,orderCount=2262}, MonthOrderCount{month=null,orderCount=2531}, MonthOrderCount{month=null,orderCount=2379}, MonthOrderCount{month=null,orderCount=2106}, MonthOrderCount{month=null,orderCount=1498}, MonthOrderCount{month=null,orderCount=1300}, MonthOrderCount{month=null,orderCount=1578}, MonthOrderCount{month=null,orderCount=2385}, MonthOrderCount{month=null,orderCount=2991}, MonthOrderCount{month=null,orderCount=2219}, MonthOrderCount{month=null,orderCount=1943}, MonthOrderCount{month=null,orderCount=264}]


如果要将resultset转换为JavaBeans列表,则需要重写toBeanList()而不是toBean()方法

最终被重写的处理器类如下所示:

public class MonthOrderCountHandler extends BasicRowProcessor {

    @Override
    public List toBeanList(ResultSet rs, Class clazz) {
        try {
            List newlist = new LinkedList();
            while (rs.next()) {
                newlist.add(toBean(rs, clazz));
            }
            return newlist;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    @Override
    public Object toBean(ResultSet rs, Class type) throws SQLException {

        // Year
        Year year = new Year();
        year.setYearNo(rs.getInt("yearNo"));
        year.setYear4(rs.getString("year4"));
        year.setYear2(rs.getString("year2"));

        // Quarter
        Quarter quarter = new Quarter();
        quarter.setQuarterNo(rs.getInt("quarterNo"));

        // Month
        Month m = new Month();
        m.setYear(year);
        m.setQuarter(quarter);
        m.setMonthAbbreviation(rs.getString("monthAbbreviation"));
        m.setMonthName(rs.getString("monthName"));
        m.setMonthNo(rs.getInt("monthNo"));

        // Final bean
        MonthOrderCount result = new MonthOrderCount();
        result.setMonth(m);
        result.setOrderCount(rs.getInt("orderCount"));

        return result;

    }
}

我希望它能帮助一些人。

如果要将resultset转换为JavaBeans列表,则需要重写toBeanList()而不是toBean()方法

最终被重写的处理器类如下所示:

public class MonthOrderCountHandler extends BasicRowProcessor {

    @Override
    public List toBeanList(ResultSet rs, Class clazz) {
        try {
            List newlist = new LinkedList();
            while (rs.next()) {
                newlist.add(toBean(rs, clazz));
            }
            return newlist;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    @Override
    public Object toBean(ResultSet rs, Class type) throws SQLException {

        // Year
        Year year = new Year();
        year.setYearNo(rs.getInt("yearNo"));
        year.setYear4(rs.getString("year4"));
        year.setYear2(rs.getString("year2"));

        // Quarter
        Quarter quarter = new Quarter();
        quarter.setQuarterNo(rs.getInt("quarterNo"));

        // Month
        Month m = new Month();
        m.setYear(year);
        m.setQuarter(quarter);
        m.setMonthAbbreviation(rs.getString("monthAbbreviation"));
        m.setMonthName(rs.getString("monthName"));
        m.setMonthNo(rs.getInt("monthNo"));

        // Final bean
        MonthOrderCount result = new MonthOrderCount();
        result.setMonth(m);
        result.setOrderCount(rs.getInt("orderCount"));

        return result;

    }
}
我希望它能帮助别人