<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 10:54:52 浏览: 121
在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="treeListResult" type="TreeListVo"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="parent_id" property="parentId"/> <result column="sort" property="sort"/> <collection property="children" ofType="TreeListVo"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="parent_id" property="parentId"/> <result column="sort" property="sort"/> <collection property="children" ofType="TreeListVo"> ... </collection> </collection> </resultMap>sql怎么写
假设你的树形结构表名为 `tree`,包含字段 `id`、`name`、`parent_id`、`sort`,其中 `id` 是主键,`parent_id` 是父节点的 ID,根节点的 `parent_id` 为 null。根据上面的 `resultMap` 配置,一对多查询的 SQL 可以这样写:
```sql
SELECT *
FROM tree t1
LEFT JOIN tree t2 ON t1.id = t2.parent_id
WHERE t1.parent_id IS NULL
ORDER BY t1.sort, t2.sort
```
这个 SQL 查询出所有根节点及其子节点,按照根节点的 `sort` 字段升序排列,子节点按照其 `sort` 字段升序排列。其中,`t1` 表示根节点,`t2` 表示子节点。`LEFT JOIN` 保证即使某个根节点没有子节点,仍然能查询出来。
注意,如果树很大,这个查询可能会很慢,需要根据实际情况进行优化,例如增加索引等。
阅读全文