java - 在 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>
解决方案
如果我理解正确,您基本上是想通过andMake
的复合键来识别父对象。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
,而是用于标识它。
推荐阅读
- c# - 为什么 EF 核心告诉我“指定的成员未映射”?
- android - 在 Android TV 中添加自签名证书
- android - 如何将 where 条件添加到关系模型中?
- html - 电子邮件地址流入文本输入字段的第二行
- django - 获取与模型无关的记录
- apache-kafka - Kafka Headers作为批处理模式的列表
- git - IllegalState 无法加载 ApplicationContext
- python-3.x - 将输入存储为变量然后尝试使用正则表达式提取为字符串会给出错误:AttributeError: 'str' object has no attribute 'str'
- javascript - 在多个 html 文件上使用 innerHTML/innerText 打印变量
- java - 如何在informix中从另一个数据库复制表ddl和数据