public class EquipmentVo extends RegionalEquipment { private List<EquipmentDataVo> equipmentDataVoList; private List<Map> maps; public List<Map> getMaps() { return maps; } public void setMaps(List<Map> maps) { this.maps = maps; } public List<EquipmentDataVo> getEquipmentDataVoList() { return equipmentDataVoList; } public void setEquipmentDataVoList(List<EquipmentDataVo> equipmentDataVoList) { this.equipmentDataVoList = equipmentDataVoList; } } <resultMap id="eqMapVo" type="EquipmentVo"> <result property="eqId" column="eq_id"/> <result property="companyId" column="company_id"/> <result property="itemName" column="item_name"/> <result property="eqName" column="eq_name"/> <result property="serialNumber" column="serial_number"/> <collection property="maps" javaType="Map"> <result column="mm" property="mm"/> <result column="yy" property="yy"/> <result column="week" property="week"/> <result column="dd" property="dd"/> <result column="hh" property="hh"/> <result column="minit" property="minit"/> <result column="eqName" property="eqName"/> <result column="itemName" property="itemName"/> <result column="rm" property="rm"/> </collection> </resultMap>是否可行
时间: 2024-04-27 21:25:28 浏览: 89
这段代码可以用来定义 MyBatis 的结果映射,将查询结果映射成 `EquipmentVo` 对象。
在这段代码中,`<resultMap>` 标签定义了一个名为 `eqMapVo` 的结果映射,将查询结果映射成 `EquipmentVo` 对象。在 `<result>` 标签中,使用 `property` 属性指定了 Java 对象的属性名,使用 `column` 属性指定了查询结果的列名。这里使用了 `<collection>` 标签来映射 `maps` 属性,将查询结果的多条记录映射成一个 `List<Map>` 对象。
需要注意的是,在 `<collection>` 标签中的 `javaType` 属性应该为 `java.util.List`,而不是 `java.util.Map`,因为结果集中的每一行数据都是一个 `Map` 对象,这些 `Map` 对象组成了一个 `List` 对象。此外,在 `<result>` 标签中使用的 `property` 属性应该与 `Map` 对象的键值对中的键名相同,以便将查询结果正确地映射到 `Map` 对象中。
相关问题
mybatis如何映射下面的实体类 public class EquipmentVo extends RegionalEquipment { private List<EquipmentDataVo> equipmentDataVoList; private List<Map> maps; public List<Map> getMaps() { return maps; } public void setMaps(List<Map> maps) { this.maps = maps; } public List<EquipmentDataVo> getEquipmentDataVoList() { return equipmentDataVoList; } public void setEquipmentDataVoList(List<EquipmentDataVo> equipmentDataVoList) { this.equipmentDataVoList = equipmentDataVoList; } }
在 MyBatis 中映射这个实体类,可以新建一个对应的映射文件,并在该文件中编写 SQL 语句和相应的映射规则。以下是一个映射文件的示例:
```
<resultMap id="equipmentVoMap" type="com.example.EquipmentVo">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="equipmentDataVoList" column="id" javaType="java.lang.Integer" select="com.example.EquipmentDataMapper.selectByEquipmentId"/>
<result property="maps" column="id" javaType="java.lang.Integer" select="com.example.MapMapper.selectByEquipmentId"/>
</resultMap>
<select id="selectById" resultMap="equipmentVoMap">
SELECT id, name, create_time, update_time
FROM equipment
WHERE id = #{id}
</select>
```
在上面的示例中,`resultMap` 标签定义了一个结果映射,其中使用了 `<result>` 标签将查询结果的列映射到实体类的属性上。其中 `equipmentDataVoList` 属性和 `maps` 属性的值需要通过另外的 SQL 语句进行查询,所以在 `<result>` 标签中使用了 `select` 属性来指定查询的 SQL 语句和对应的 Mapper 接口方法。在实现这些 Mapper 接口方法时,需要通过 MyBatis 的动态 SQL 语句来拼接查询条件,以保证查询的准确性。
封装一个resultMap,映射实体类public class EquipmentVo extends RegionalEquipment { private List<EquipmentDataVo> equipmentDataVoList; private List<Map<String,Object>> maps; public List<Map<String, Object>> getMaps() { return maps; } public void setMaps(List<Map<String, Object>> maps) { this.maps = maps; } public List<EquipmentDataVo> getEquipmentDataVoList() { return equipmentDataVoList; } public void setEquipmentDataVoList(List<EquipmentDataVo> equipmentDataVoList) { this.equipmentDataVoList = equipmentDataVoList; } },其中map中的键不固定,随着不同的SQL语句而改变,数据源是两个表,存在一对多关系
您可以封装一个resultMap来实现对EquipmentVo实体类的映射,具体实现可以参考以下代码:
```xml
<resultMap id="equipmentVoMap" type="EquipmentVo">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="model" column="model"/>
<result property="regionId" column="region_id"/>
<!-- 一对多关系映射 -->
<collection property="equipmentDataVoList" ofType="EquipmentDataVo">
<result property="id" column="e_id"/>
<result property="name" column="e_name"/>
<result property="value" column="e_value"/>
<result property="equipmentId" column="equipment_id"/>
</collection>
<!-- 动态的map映射 -->
<collection property="maps" ofType="java.util.HashMap" resultMap="dynamicMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="model" property="model"/>
<result column="region_id" property="regionId"/>
<result column="e_id" property="equipmentId"/>
<result column="e_name" property="equipmentName"/>
<result column="e_value" property="equipmentValue"/>
</collection>
</resultMap>
<resultMap id="dynamicMap" type="java.util.HashMap">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="model" property="model"/>
<result column="region_id" property="regionId"/>
<result column="e_id" property="equipmentId"/>
<result column="e_name" property="equipmentName"/>
<result column="e_value" property="equipmentValue"/>
</resultMap>
```
其中,equipmentDataVoList是对应的一对多关系,maps是动态的map映射,ofType属性指定集合中元素的类型,resultMap属性指定使用的resultMap。动态的map映射需要额外定义一个resultMap,其中的property对应的是map中的键,column对应的是数据库表中的列名。在SQL语句中,需要使用AS关键字来指定map中的键名,例如:
```sql
SELECT e.*, d.id AS e_id, d.name AS e_name, d.value AS e_value
FROM equipment e
LEFT JOIN equipment_data d ON e.id = d.equipment_id
```
注意,当使用动态的map映射时,需要将实体类中对应的属性置为null,否则会出现重复映射的问题。
阅读全文