如何将DBUtils结果集转换为由更多域对象合成的JavaBean?
我正在Spring框架中创建MVC web应用程序,需要将ApacheDbutils结果集中的行转换为由嵌套对象组成的JavaBean 关于少数几个示例,我发现我创建了这个RowProcessor实现如何将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
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;
}
}
我希望它能帮助别人