我有这样的POJO
class foo
{
private String id;
private String attribute;
private Map<String, String> dataMap;
}
我的数据模型是
Table Item
- INT id
- CHAR attribute
//将dataMap存储为键值对
Table Data
- INT id
- CHAR key
- CHAR value
现在,我想结合以下2个查询
第一次查询:
@Select("select * from Item where attribute=#{attribute}"
public List<Item> getItemList(@Param("attribute") String attribute);
获取给定id的所有键值对的另一个查询
如何获得单个查询,给定属性,获取id列表并填充嵌套对象(dataMap)
//经历了@Results,@ Result ..
答案 0 :(得分:9)
这种情况可以通过两种方式在myBatis中解决:
第一个选项对性能非常不利,导致所谓的“n + 1选择问题”。第二个是做这种事情的首选方式。
MyBatis User guide包含使用嵌套结果的示例,但它用于XML配置。 Java注释有一些限制但理论上应该可以这样做(我从未尝试过id,因为我不喜欢在Java代码中选择,但下面的文章提供了一些有用的信息:IBatis (MyBatis): Handling Joins: Advanced Result Mapping, Association, Collections, N+1 Select Problem)。