首页 > 解决方案 > 在 MyBatis 中为每行结果集创建一个单独的对象

问题描述

我正在使用 MyBatis 来查询数据库。我试图将结果分成不同的对象,但 MyBatis 正在组合结果。我的意思是,当我尝试如下所述映射结果时,我得到一个包含 2 个Make对象的列表,其中丰田在列表中有 3 个Model对象,models而本田Model在列表中有 2 个对象models

相反,我想获得一个包含 5 个对象的列表,每个Model对象在models列表中都有 1 个对象。

有人可以帮我吗?

我有 2 个 POJO,如下所示

class Make {
    long makeId;
    String makeName;
    List<Model> models;

    // Getter and setters
}

class Model {
    long modelId;
    String modelName;
}

我有一个查询以以下格式提取结果。

在此处输入图像描述

我的结果集看起来像

<resultMap type='Make' id='resultMap'>
    <id property='makeId' column='make_id' />
    <result property='makeName' column='make_name' />
    <collection property="models" ofType="Model" javaType="list">
        <id property='modelId' column='model_id' />
        <result property='modelName' column='model_name' />
    </collection>
</resultMap>

标签: javaoraclemybatisibatis

解决方案


如果我理解正确,您基本上是想通过andMake的复合键来识别父对象。make_idmodel_id

以下结果图可能会返回您期望的结果。

<resultMap type='Make' id='resultMap'>
  <id property='makeId' column='make_id' />
  <id column="model_id" /><!-- added -->
  <result property='makeName' column='make_name' />
  <collection property="models" ofType="Model" javaType="list">
    <id property='modelId' column='model_id' />
    <result property='modelName' column='model_name' />
  </collection>
</resultMap>

通过省略property中的属性<id />,该列model_id不会映射到Make,而是用于标识它。


推荐阅读