<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>这段代码中的Dept类中没有无参构造就会报错是为什么
时间: 2023-07-19 13:54:52 浏览: 43
在MyBatis中,当创建一个对象时,会首先调用它的无参构造函数,然后通过setter方法设置对象的属性。如果一个类中没有显式定义无参构造函数,Java会自动提供一个无参构造函数。但是,如果一个类中显式定义了有参构造函数,Java就不会再自动提供无参构造函数了。
在这段代码中,Emp类中引用了Dept类,如果Dept类中没有无参构造函数,那么在创建Emp对象时,MyBatis就无法通过调用无参构造函数来创建Dept对象,从而导致报错。为了解决这个问题,我们可以在Dept类中显式定义一个无参构造函数,或者在创建Dept对象时使用有参构造函数来传入参数。
相关问题
<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对象
在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` 集合中。