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

Creating a separate object for each row of results-set in MyBatis

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

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

有人能帮我吗?

我有如下 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>

如果我没理解错的话,你基本上是想通过make_idmodel_id.

的组合键来识别父对象Make

下面的结果图可能return你期待的结果。

<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>

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