ResultMap子元素一览
<constructor>节点配置
假如,我们返回类型的POJO不包含无参构造函数,只有一个下面的有参构造:
public class RoleBean
{
public RoleBean(Integer id, String roleName)
{
this.id = id;
this.roleName = roleName;
}
}
可以在resultMap中配置<constructor>
<resultMap>
<constructor>
<idArg column="id" javaType="int"/>
<arg column = "role_name" javaType="string"/>
</constructor>
...
</resultMap>
什么是级联?
数据库中的一对一、一对多、多对多的映射,一般会直接加载映射的数据,而不需要过多的多表联查(对于级联数小的情形)
使用级联的情形一般不超过三层
级联的分类
1.鉴别器
根据一定的条件实现类级联
2.一对一
身份证和人之间的对应关系
3.一对多
专辑和歌曲的对应关系
一一映射
有一个任务类:
public class Task
{
private Long id;
private String title;
private String content;
private String note;
//setter和getter方法省略
}
对应数据表:
有一个员工任务类:
public class EmployeeTask
{
private Long id;
private Long empId;
private Task task = null;
private String taskName;
private String note;
//setter和getter方法
}
对应数据表:
我们看到,POJO中,在EmployeeTask中包含一个Task类型的字段,查询EmployeeTask的时候顺便把Task信息查询出来,这就是级联。但是数据库存储的时候,我们只存Task的主键即可,也就是EmployeeTask表中的task_id字段。
先看看根据task的id查询Task的Mapper:
再看EmployeeTask查询Task的语句:
<association>节点用于表明两个POJO之间的级联关系,一般放置在引用方,被引用方只需要提供主键即可。
property用于指定引用方POJO的某个属性,这里指的是EmployeeTask的task字段。
column用于指定对应的数据表的列名,我们需要使用这个列对应的值去被引用表中进行查询:
select指定的是某个Mapper下的某个查询语句,getTask是mapper语句的id,使用全限定名。
通过这样的映射,在查询EmployeeTask的时候,就可以对应的Task字段一并读取出来。