我有两个班级
class Deptartment{
int deptid,
String deptname;
List<Employee> employees;
}
class Employee{
int empid;
String empname;
int deptid;
}
Table:
Department:
deptid,deptname
Employee
empid,empname,deptid
Query: select * from deptartment d,employee e where d.deptid= e.deptid
现在我如何使用spring jdbc模板填充Department对象?
答案 0 :(得分:10)
为了帮助Sean Patrick Floyd,这是他的解决方案,只需一个查询:
final Map<Integer, Department> departments = new HashMap<Integer, Department>();
this.jdbcTemplate.query(
"select d.deptid, d.deptname, e.empid, e.empname from Department d inner join Employee on e.deptid = e.deptid",
new RowMapper<Employee>() {
public Department mapRow(ResultSet rs, int rowNum) throws SQLException {
Integer deptId = rs.getInt("deptid");
Department d = (Department) departments.get(deptId);
if (d == null) {
String deptName = rs.getString("deptname");
d = new Department();
d.setDeptId(deptId);
d.setDeptName(deptName);
departments.put(deptId, d);
}
Employee employee = new Employee();
employee.setEmpId(rs.getInt("empid"));
employee.setEmpName(rs.getString("empname"));
employee.setDeptId(deptId);
d.getEmployees().add(employee);
return employee;
}
});
List<Department> result = new ArrayList<Department>(departments.values());
它恰好更短,更有效率。
答案 1 :(得分:2)
目前Spring没有直接支持这种情况。但是,您可以使用the following MultipleRowMapper
class建议将其包含在Spring的未来版本中。
答案 2 :(得分:0)
这样的事情会:
Department department = this.jdbcTemplate.queryForObject(
"select deptid, deptname from Department where deptid = :deptid",
new Object[deptid],
new RowMapper<Department>() {
public Department mapRow(ResultSet rs, int rowNum) throws SQLException {
Department department = new Department();
department.setDeptid(rs.getInt("deptid"));
department.setDeptname(rs.getString("deptname"));
return department;
}
});
department.setEmployees(this.jdbcTemplate.query(
"select empid, empname from Employee",
new RowMapper<Employee>() {
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setEmpid(rs.getInt("emptid"));
employee.setEmpname(rs.getString("empname"));
return department;
}
});