<resultMap id="empAndDeptResultMap" type="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> <result column="dept_id" property="dept.deptId"></result> <result column="dept_name" property="dept.deptName"></result> </resultMap>中为什么Emp类中没有无参构造MyBatis却能正确创建Emp对象
时间: 2023-10-09 11:07:40 浏览: 82
在MyBatis中,如果一个类中没有显式定义无参构造函数,Java会自动提供一个无参构造函数。当MyBatis创建Emp对象时,它会首先调用Emp的无参构造函数来创建一个对象,然后通过调用setter方法来设置对象的属性。因此,尽管Emp类中没有显式定义无参构造函数,MyBatis仍然可以正确创建Emp对象。
但是,如果Emp类中定义了有参构造函数,而没有显式定义无参构造函数,那么在创建Emp对象时就会出现问题。因为MyBatis无法通过调用无参构造函数来创建Emp对象,因此会抛出异常。所以,最好为每个类都显式地定义一个无参构造函数,以确保MyBatis能够正确地创建对象。
相关问题
<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"/> </resultMap>中,maps的字段如何指定
在 `<collection>` 标签中,通过 `property` 属性指定集合属性的名称,这里是 `maps`。而 `javaType` 属性指定集合中元素的类型,这里是 `Map`,表示该集合中的元素是 `Map` 类型。如果查询结果中包含了与 `maps` 集合相关的列,可以在 `<collection>` 标签中通过 `<result>` 标签来映射这些列到 `Map` 对象的属性上。例如,如果查询结果中包含了 `key` 和 `value` 两列,可以通过如下方式将它们映射到 `Map` 对象的属性上:
```
<collection property="maps" javaType="Map">
<result column="key" property="key"/>
<result column="value" property="value"/>
</collection>
```
这样,在映射查询结果时,每行记录中的 `key` 和 `value` 列的值都会被封装成一个 `Map` 对象,并添加到 `maps` 集合中。
<id column="value" property="value"/>报错
非常抱歉,我之前的回答有误。在使用动态SQL片段时,`<id>` 元素是不需要的,因为我们只是想获取一列数据而不是主键。请修改你的代码如下:
```xml
<resultMap id="PinResultMap" type="java.lang.String">
<result column="value" property="value"/>
</resultMap>
<select id="getDistinctPin1" resultMap="PinResultMap" parameterType="com.example.pmp.pojo.dto.sense.senseDataDto">
<include refid="distinctQuery">
<property name="column" value="FAI_26_1_Value"/>
</include>
</select>
<select id="getDistinctPin2" resultMap="PinResultMap" parameterType="com.example.pmp.pojo.dto.sense.senseDataDto">
<include refid="distinctQuery">
<property name="column" value="FAI_26_2_Value"/>
</include>
</select>
<select id="getDistinctPin3" resultMap="PinResultMap" parameterType="com.example.pmp.pojo.dto.sense.senseDataDto">
<include refid="distinctQuery">
<property name="column" value="FAI_26_3_Value"/>
</include>
</select>
```
这样,你就可以正确地将查询结果映射到 `String` 类型的属性 `value` 上,并且不需要 `<id>` 元素。再次对之前的错误表示抱歉,希望这次回答能够解决你的问题。如果还有其他问题,请随时提出。
阅读全文