2011-07-19 106 views
0

如何映射两个彼此相互引用的表的行? 例如有Employee和Department表。员工可以参考作为员工部门的部门模型,部门可以参考部门经理的员工模型。那么我怎样才能做到使用Spring RowMapper映射行。Spring Jdbc映射行

感谢,

+0

'RowMapper'适用于结果集,而不是表格。您需要编写正确的SQL,然后按照您选择的方式映射平面结果集。 – skaffman

回答

1

我如何可以映射指对方两个表中的行?

例如像这样:

public class TwoTablesRowMapper implements RowMapper<Map<String, Object>> { 

    /** 
    * Map data from select over 2 tables e.g.: 
    * 
    * select 
    * A.foo as afoo, 
    * B.bar as bbar 
    * from PARENT A, 
    *  CHILD B 
    * where A.ID = B.ID 
    * 
    * 
    * @param rs 
    * @param rowNum 
    * @return 
    * @throws SQLException 
    */ 
    public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException { 
     Map<String, Object> resultMap = new HashMap<String, Object>(); 

     // instead of a map one could fill an object 
     // e.g.: myObject.set.afoo(afoo) 
     resultMap.put("afoo", rs.getString("afoo")); 
     resultMap.put("bbar", rs.getString("bbar")); 

     return resultMap; 
    } 
} 

的SQL部分我建议你创建一个特定的SQL细节(表,关系等),一个新的问题和标记SQL,它应该找到更多的( sql-savvy)查看器

+0

谢谢,这适用于关系不太复杂的小域对象。但实际上我希望每个模型类都有自己的映射类。例如:Employee模型有一个对Department的引用,当填充领域模型时,我需要Employee类来请求部门映射器类,以获取基于部门ID的引用部门实例。反之亦然。这意味着我试图从EJB这样的ORM工具中获得功能。 – Issa

+0

除非我做这个映射,我不能像Employee emp = something;并调用emp.getDepartment()。getDepartmentName();或emp.getDepartment()。getManager()。firstName();请,你会建议我做正确的方法吗? – Issa

+0

基本上你选择自编程映射或ORM,这是正确的方式?取决于你的需求,性能,预期的实现时间,预期的变化等等,如果你有多个这样的映射 - 我会去ORM(JPA2与Hibernate,TopLink和朋友),但是你需要ORM知识, ORM方面的其他陷阱:-) –