■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ Hibernate框架 ——映射配置文件基本詳細(xì)配置↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
引入hibernate核心包下的org.hibernate的映射文件的約束
-->
"-//Hibernate/Hibernate Mapping DTD3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
根據(jù)約束文件創(chuàng)建根標(biāo)簽
auto-import 是查找這個映射類的文件的時候是按照類路徑進(jìn)行查找的
lazy 是設(shè)置是否延遲加載前普,默認(rèn)是true,設(shè)置為false則是立即加載
◆映射的標(biāo)簽也是可以設(shè)置的
-->
class 根據(jù)一個類進(jìn)行映射
name 是類的類路徑
table 是需要進(jìn)行映射的表
-->
<id>是定義這個表的主鍵映射
name 是類的屬性
column 是表的字段名
-->
genetator 是定義這個id的值是如何創(chuàng)建的
class 是定義主鍵進(jìn)行創(chuàng)建的方式
方式一;自行維護(hù)
assigned 是開發(fā)人員給的,
如果開發(fā)人員沒有對主鍵進(jìn)行賦值則自動賦值推捐,
1 但是是從0開始负乡,并且是只會賦值一次。
方式二酌壕;底層數(shù)據(jù)庫維護(hù)
identity ?針對sql數(shù)據(jù)庫的
squence ? 針對orcle數(shù)據(jù)庫的
native ? ?自適應(yīng)
方式三晨炕;hibernate框架維護(hù)
increment 是根據(jù)最大的id+1進(jìn)行計(jì)算的
uuid ? ? ? ?是底層生成一個uuid的衫画,
? ? 但是必須要是字符類型或者文本類型
◆注;如果主鍵是使用自生成的瓮栗,
那么這個主鍵第一個值必須要是這個自動生成的規(guī)則削罩,
如;第一個必須是1
? 并且有一些是手動設(shè)置以及是失效的费奸,只會使用自生成的值
-->
property 是定于類的屬性和表字段直接的關(guān)系弥激,
如果表的字段和類的屬性名是一樣的則不需要寫column默認(rèn)是一樣的
name 是映射類的屬性名
column 是表的映射字段名
type ? 則是需要存入數(shù)據(jù)庫的類型
length 則是可以存入數(shù)據(jù)庫的大小
因?yàn)樵?lt;id>中定義了主鍵所以不需要在<property>中再次定義
在hibernate框架中對數(shù)據(jù)庫的操作有三種數(shù)據(jù)庫存儲類型,
每一種數(shù)據(jù)類型都是一一對應(yīng)的货邓。
java ? ? ? ? ?? ? ? ?hibernate ? ? ? ? MySql
java.lang.String ? ? ?stringstring/text/clob
java.lang.byte ? ? ??binary ? ? ? ? ? ? blob
-->
<!-- ◆◆◆ 在對文件進(jìn)行操作的時候建議檢查數(shù)據(jù)庫的數(shù)據(jù)類型和存放的大小◆◆◆ -->
<!-- 對字符文件進(jìn)行操作-->
<!-- 對字節(jié)文件進(jìn)行操作-->
<!-- 集合映射-->
配置Set映射
name 是進(jìn)行映射類的Set屬性名
table 是這個映射集合的表名
-->
? key 是設(shè)置這個表與主表的外鍵關(guān)聯(lián)鍵
-->
element 是定義這個表秆撮,存放數(shù)據(jù)的字段
-->
list 是設(shè)置這個表的List屬性的副表
name 映射類中的list名
table 是這個副表的名
-->
key 是設(shè)置這個表與主表的外鍵
cloumn 是這個外鍵的字段名
-->
因?yàn)長ist集合是一個有序的所以需要定義一個list索引值,
因?yàn)閕d如果進(jìn)行了刪除那么則會出現(xiàn)斷層
? column 是定義這個索引值的字段名
-->
element 是設(shè)置這副表的存放數(shù)據(jù)的字段
column 是字段名
-->
map 是定義映射類中的Map集合
name 是映射類的Map集合屬性名
table 是定義這個映射類的表的表名
-->
key ?是定義這個表的與主表的外鍵
column 是定義這個外鍵的字段名
-->
因?yàn)閙ap 集合是有一個key的所以則使用map-key標(biāo)簽
column 是定義這key的字段名
type 是定義這個字段的類型换况,·····必須
-->
element 是定義字段名
column 是定義這個字段名
-->
----------- 對象映射---------------
+----------------> ? ?多對一映射;單向
| ?設(shè)置對一方的配置
| name 當(dāng)前這個一方位于多方類中屬性名
| class 是這個多方類的類路徑
| column 是這個多方法位于表的外鍵字段
| cascade 是設(shè)置這個2個表之間的級聯(lián)盗蟆,
| 在寫到代碼的時候可以省略一點(diǎn)戈二,在刪除,
| 修改等操作則會自動映射到一方的表也進(jìn)行這樣的操作喳资。
| 可是如果有多個映射到一方表中的某一個數(shù)據(jù)觉吭,那么則在刪除的時候則要關(guān)閉級聯(lián)。
| save-update 是保存和更新
| delete ? ? ?是刪除
| all ? ? ? ? 是所有
結(jié) none ? ? ? ?關(guān)閉仆邓,默認(rèn)
合-->
就
是class="com.levi._02m_t_o_single.Person"
雙column="p_id"
向>
|
|
|
| 配置多方的映射
| cascade 是配置這個2個表之間的外鍵級聯(lián)
| save-update 保存和修改級聯(lián)
| delete 刪除級聯(lián)
| all 所有
| none 默認(rèn)是沒有
| -->
|
+-------------> ? ? 一對多映射鲜滩;單向
在數(shù)據(jù)進(jìn)行保存的時候出現(xiàn)了2次的update。
因?yàn)檫@個update的出現(xiàn)是因?yàn)樵趇nsert的時候那個外鍵是空的节值,
從而在后面才需要補(bǔ)上去徙硅。
在一對多的關(guān)聯(lián)中是由一方進(jìn)行維護(hù)這個關(guān)聯(lián)關(guān)系的,
而這個關(guān)聯(lián)關(guān)系的建立是依靠外鍵的搞疗。
而這個關(guān)聯(lián)關(guān)系是由誰維護(hù)則是誰保存則是由誰維護(hù)的嗓蘑,
所以一方會主動的把自己的主鍵的值再次進(jìn)行更新到外鍵表的外鍵字段中,
由此產(chǎn)生了2個update語句。
但是可以通過設(shè)置inverse(反轉(zhuǎn))屬性桩皿,
用于將這個關(guān)聯(lián)維護(hù)關(guān)系豌汇,主動的轉(zhuǎn)換給被的表
inverse 默認(rèn)是false,不轉(zhuǎn)讓出去泄隔,需要設(shè)置為true
? ◆默認(rèn)在一方
-->
<!-- 設(shè)置這個一方類位于這個多方表的外鍵-->
配置對象映射關(guān)系
class 配置這個多方類的類路徑
-->
+-------------> ?多對多映射拒贱;雙向
| 配置對象映射,table 是中間表的表名
| cascade 是設(shè)置這個關(guān)聯(lián)
| save-update 保存/修改
| delete 刪除
| all 所有
| none 關(guān)閉級聯(lián)佛嬉,默認(rèn)
|
| inverse 設(shè)置和外鍵維護(hù)控制權(quán)給另外的一個映射逻澳,
| 因?yàn)樵诙鄬Χ嗟挠成渲袝霈F(xiàn)同時2個維護(hù)
| -->
|
多
對 <!-- 設(shè)置當(dāng)前這個表的外鍵-->
多
雙
向
| 設(shè)置這個表的映射
| column 是設(shè)置這個class屬性對應(yīng)的類的外鍵值
| -->
|
|column="s_id">
|
|
|
+-------------> ? ?多對多映射;雙向
設(shè)置對象映射
name 是屬性名
table 是中間表
-->
<!-- 設(shè)置當(dāng)前這個表的位于中間表的外鍵-->
<!-- 設(shè)置關(guān)聯(lián)表巷燥,column是設(shè)置這個關(guān)聯(lián)表的外鍵-->
column="t_id">
+-------------> ? ?一對一映射赡盘;雙向 —— 主表
| 設(shè)置映射,因?yàn)橥怄I是不在Person表的
| -->
|class="com.levi._06o_t_o_double.IdCard"
|cascade="all">
|
|
| ? ?一對一映射缰揪;雙向 —— 副表
+------------> 方式一陨享;使用一對多(多對一)雙向;
| 必須要設(shè)置外鍵是唯一的钝腺,
一 這是一個特殊的一對一抛姑。
對
一
映-->
射
雙class="com.levi._06o_t_o_double.Person"
向column="p_id"
| cascade="all"
|unique="true"> -->
|
| ? ?一對一映射;雙向 —— 副表
|
+------------> ? ? 方式二艳狐;主鍵作為外鍵
-->
class="com.levi._06o_t_o_double.Person"
cascade="all"
constrained="true">