【问题标题】:Fetching nested object using mybatis annotations使用mybatis注解获取嵌套对象
【发布时间】:2012-04-26 10:00:51
【问题描述】:

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

【问题讨论】:

    标签: java mybatis


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 最后的注解例子是嵌套选中的...好像没办法使用注解实现嵌套结果?
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多