使用Mybatis注解获取嵌套对象

3
我有一个这样的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

现在,我希望将以下两个查询结合起来。
第一个查询:
@Select("select * from Item where attribute=#{attribute}"
public List<Item> getItemList(@Param("attribute") String attribute);

获取给定id的所有键值对的另一个查询

如何进行单个查询,根据给定属性,获取id列表并填充嵌套对象(dataMap)

//已经了解了@Results,@Result等

1个回答

9
这种情况可以通过两种方式在 myBatis 中解决:
  • 嵌套查询 - 检索项目列表,对于每个项目运行单独的查询以获取数据;
  • 嵌套结果 - 运行单个联接查询检索带有关联数据的项目,并让 myBatis 处理结果中重复的子集;
第一种选项对性能非常不利,并导致所谓的 "n+1 查询问题"。第二种方法是执行此类操作的首选方式。 MyBatis 用户指南 包含使用嵌套结果的示例,但它是针对 XML 配置的。Java 注释有一些限制,但从理论上讲应该可以做到这一点(我从未尝试过,因为我不喜欢将我的查询放在 Java 代码中,但以下文章提供了一些有用的信息:IBatis (MyBatis):处理联接:高级结果映射、关联、集合、N+1 查询问题)。

最后的注释示例是嵌套选择的...似乎没有使用注释实现嵌套结果的方法? - Bruce Sun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接