为MyBatis中的结果集的每一行创建一个单独的对象

问题描述 投票:2回答:1

我正在使用MyBatis查询数据库。我试图将结果分成不同的对象,但是MyBatis正在组合结果。我的意思是,当我尝试按以下说明映射结果时,我得到一个2 Make对象的列表,其中Toyota在Model列表中具有3 models对象,本田在Model中具有2 models对象]列表。

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

有人可以在这里帮助我吗?

我有2个POJO,如下所示

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

    // Getter and setters
}

class Model {
    long modelId;
    String modelName;
}

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

enter image description here

我的结果集看起来像

<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>
java oracle mybatis ibatis
1个回答
0
投票

如果我理解正确,您基本上想通过Makemake_id的复合键来标识父对象model_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,但用于标识它。

© www.soinside.com 2019 - 2024. All rights reserved.