JavaEE-SSM:014 Mybatis映射器(5)

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字段一并读取出来。

猜你喜欢

转载自blog.csdn.net/Day_and_Night_2017/article/details/84281879