使用mybatis注释获取嵌套对象

时间:2012-04-26 10:00:51

标签: java mybatis

我有这样的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 ..

1 个答案:

答案 0 :(得分:9)

这种情况可以通过两种方式在myBatis中解决:

  • 嵌套选​​择 - 您检索项目列表,并为每个项目运行单独的选择以获取数据;
  • 嵌套结果 - 您通过运行单个连接查询来检索具有关联数据的项目,并让myBatis处理结果中的重复子集;

第一个选项对性能非常不利,导致所谓的“n + 1选择问题”。第二个是做这种事情的首选方式。

MyBatis User guide包含使用嵌套结果的示例,但它用于XML配置。 Java注释有一些限制但理论上应该可以这样做(我从未尝试过id,因为我不喜欢在Java代码中选择,但下面的文章提供了一些有用的信息:IBatis (MyBatis): Handling Joins: Advanced Result Mapping, Association, Collections, N+1 Select Problem)。