我正在使用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;
}
我有一个查询以以下格式提取结果。
我的结果集看起来像
<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
和make_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
,但用于标识它。