JavaEE-SSM:014 Mybatis對映器(5)
阿新 • • 發佈:2018-11-20
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欄位一併讀取出來。