我对Spring JDBC RowMapper组织有疑问。
假设我的表格a
包含字段id
和name
,表格a_b
和表格b
。
a
id integer
name character varying (16)
b
id integer
name character varying (16)
a_b
a_b_id integer
aid integer
bid integer
Class结构不是那么对称:
class A{
int id;
String name;
List<B> bs;
}
class B{
int id;
String name;
}
我想为A类构造一个RowMapper类。起始代码如下:
class AMapper implements RowMapper<A>{
public A mapRow(ResultSet rs, int num){
A a = new A();
a.setId(rs.getInt("id"));
a.setName(rs.getString("name"));
return a;
}
}
我怎样才能映射b
的列表?有没有办法在没有in-mapper sql查询的情况下获得它?
答案 0 :(得分:0)
如果你想用一个查询来获取它们,你将不得不使用JOIN来从多个表中获取(无论你使用LEFT join还是INNER,它取决于你想要实现的目标),这将返回一个矩阵组合列,在ResultSet中是这样的:
a_id | a_name | b_id | b_name | ...
------------------------------------
1 | Name1A | 1 | Name1B | ...
1 | Name1A | 2 | Name2B | ...
1 | Name1A | 3 | Name3B | ...
虽然您有1条记录,但它与多个B相关联,并且会在每一行中。
您需要通过地图或设置跟踪A.像这样的东西(你可能需要调整它):
class AMapper implements RowMapper<A> {
Map<Integer, A> aMap = new HashMap<>();
public A mapRow(ResultSet rs, int num){
A a = aMap.get(rs.getInt("id"));
if(a == null){
a = new A();
a.setId(rs.getInt("a_id"));
a.setName(rs.getString("a_name"));
aMap.put(a.getId(), a);
}
B b = new B();
b.setId(rs.getInt("b_id");
b.setName(rs.getString("b_name"));
a.addB(b);
}
}