问题
I have two classes
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
Now how can i populate Department object using spring jdbc template?
回答1:
To help Sean Patrick Floyd, here's his solution with a single query :
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());
It happens to be shorter and more efficient.
回答2:
There is no direct support of this scenario in Spring currently. However, you can use the following MultipleRowMapper class proposed for inclusion into future versions of Spring.
回答3:
Something like this will do:
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;
}
});
来源:https://stackoverflow.com/questions/6521937/using-spring-jdbc-template-for-populating-results