前言
在客觀世界中,對象很少是孤獨存在的,如班級與學生之間的關系,學生與課程之間的關系,它們的實例之間可以互相訪問,這就是關聯關系。mybatis 的關聯映射可以大大簡化持久層數據的訪問,關聯關系的分類如下:
- 一對一
- 一對多
- 多對多
我們首先繪制一個簡化的 e-r 圖來表示三種關聯關系。
上圖表示的三種關系:
- 一對一:一個班主任只屬于一個班級,一個班級也只能有一個班主任
- 一對多:一個班級有多個學生,一個學生只屬于一個班級
- 多對多:一個學生可以選多門課,一門課可以有多個學生選
引言
而在實際項目開發中,經常存在一對一的關系,如一個人對應一張身份證信息,這就是一對一的關系。下面是一個簡單的
實例:
1、建表過程我就省略了,主要是一張person表,一張idcard表,其相關屬性見步驟2pojo類屬性所示;
2、建立一個person對象和一個idcard對象:
mybatis/pri/xiaoyang/otot/pojo/idcard.java
1
2
3
4
5
6
|
public class idcard implements serializable { private int id; // 主鍵 private string cardcode; // 身份證編號 private string caraddress; // 身份證地址 //構造函數及getter/setter/tostring... } |
mybatis/pri/xiaoyang/otot/pojo/person.java
1
2
3
4
5
6
7
|
public class person implements serializable { private int id; // 主鍵 private string name; // 姓名 private string sex; // 性別 private idcard idcard; //身份證對象,人和身份證一對一關系 //構造函數及getter/setter/tostring... } |
3、接下來是xml映射文件:
mybatis/pri/xiaoyang/otot/mapper/idcardmapper.xml
1
2
3
4
5
6
|
<mapper namespace= "pri.xiaoyang.otot.mapper.idcardmapper" > <!-- 根據主鍵查詢idcard信息,封裝為idcard對象并返回 --> <select id= "selectidcardbyid" pamaetertype= "int" resulttype= "pri.xiaoyang.otot.pojo.idcard" > select * from idcard where id = #{id} </select> </mapper> |
mybatis/pri/xiaoyang/otot/mapper/personmapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<mapper namespace= "pri.xiaoyang.otot.mapper.personmapper" > <!-- 根據person主鍵查詢person信息,封裝為person對象并返回 --> <select id= "selectpersonbyid" pamaetertype= "int" resultmap= "personmapper" > select * from person where id = #{id} </select> <!-- 映射person對象的resultmap --> <resultmap type= "pri.xiaoyang.otot.pojo.person" id= "personmapper" > <id property= "id" column= "id" /> <result property= "name" column= "name" /> <result property= "sex" column= "sex" /> <!-- 一對一關聯映射:association --> <association property= "idcard" column= "card_id" select= "pri.xiaoyang.otot.mapper.idcardmapper.selectidcardbyid" javatype= "pri.xiaoyang.otot.pojo.idcard" /> </resultmap > </mapper> |
注: 在personmapper.xml中定義了一個<select/>標簽,該標簽的sql語句是根據person表的主鍵字段來查詢出唯一的person信息,由于該person表和idcard表關聯,因此返回一個resultmap值為personmap的映射對象。personmap使用了<association/>標簽映射了一對一的關聯關系,其標簽內的屬性select表示會以column的屬性值"card_id"來作為參數執行idcardmapper中定義的selectidcardbyid查詢對應的idcard數據,查詢出的數據會被封裝到property屬性值的“card”對象中。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:http://www.cnblogs.com/tanshaoxiaoji/p/mybatis_oneTOone.html