1. 程式人生 > >JavaEE-SSM:014 Mybatis對映器(5)

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欄位一併讀取出來。