您好,登錄后才能下訂單哦!
小編給大家分享一下mybatis如何實現(xiàn)一對一關(guān)聯(lián)映射,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言
在客觀世界中,對象很少是孤獨存在的,如班級與學(xué)生之間的關(guān)系,學(xué)生與課程之間的關(guān)系,它們的實例之間可以互相訪問,這就是關(guān)聯(lián)關(guān)系。MyBatis 的關(guān)聯(lián)映射可以大大簡化持久層數(shù)據(jù)的訪問,關(guān)聯(lián)關(guān)系的分類如下:
一對一
一對多
多對多
我們首先繪制一個簡化的 E-R 圖來表示三種關(guān)聯(lián)關(guān)系。
上圖表示的三種關(guān)系:
一對一:一個班主任只屬于一個班級,一個班級也只能有一個班主任
一對多:一個班級有多個學(xué)生,一個學(xué)生只屬于一個班級
多對多:一個學(xué)生可以選多門課,一門課可以有多個學(xué)生選
引言
而在實際項目開發(fā)中,經(jīng)常存在一對一的關(guān)系,如一個人對應(yīng)一張身份證信息,這就是一對一的關(guān)系。下面是一個簡單的
實例:
1、建表過程我就省略了,主要是一張Person表,一張IDCard表,其相關(guān)屬性見步驟2Pojo類屬性所示;
2、建立一個Person對象和一個IDCard對象:
mybatis/pri/xiaoyang/otot/pojo/IDCard.java
public class IDCard implements Serializable { private int id; // 主鍵 private String cardCode; // 身份證編號 private String carAddress; // 身份證地址 //構(gòu)造函數(shù)及Getter/Setter/toString... }
mybatis/pri/xiaoyang/otot/pojo/Person.java
public class Person implements Serializable { private int id; // 主鍵 private String name; // 姓名 private String sex; // 性別 private IDCard iDCard; //身份證對象,人和身份證一對一關(guān)系 //構(gòu)造函數(shù)及Getter/Setter/toString... }
3、接下來是XML映射文件:
mybatis/pri/xiaoyang/otot/mapper/IDCardMapper.xml
<mapper namespace="pri.xiaoyang.otot.mapper.IDCardMapper"> <!-- 根據(jù)主鍵查詢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
<mapper namespace="pri.xiaoyang.otot.mapper.PersonMapper"> <!-- 根據(jù)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" /> <!-- 一對一關(guān)聯(lián)映射: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/>標(biāo)簽,該標(biāo)簽的sql語句是根據(jù)Person表的主鍵字段來查詢出唯一的Person信息,由于該Person表和IDCard表關(guān)聯(lián),因此返回一個resultMap值為personMap的映射對象。personMap使用了<association/>標(biāo)簽映射了一對一的關(guān)聯(lián)關(guān)系,其標(biāo)簽內(nèi)的屬性select表示會以column的屬性值"card_id"來作為參數(shù)執(zhí)行IDCardMapper中定義的selectIDCardById查詢對應(yīng)的IDCard數(shù)據(jù),查詢出的數(shù)據(jù)會被封裝到property屬性值的“card”對象中。
以上是“mybatis如何實現(xiàn)一對一關(guān)聯(lián)映射”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。