国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Hibernate4-4 對象關(guān)系映射文件

2019-11-08 01:40:27
字體:
供稿:網(wǎng)友

  Hibernate根據(jù)對象關(guān)系映射文件來理解持久化類和數(shù)據(jù)表之間的對應(yīng)關(guān)系,也可以理解持久化類屬性與數(shù)據(jù)庫表字段之間的對應(yīng)關(guān)系,并在運行時生成各種SQL語句。


1. 映射文件根元素

這里寫圖片描述


2. class元素

這里寫圖片描述


3. 映射對象標(biāo)識符(OID)

  作用:與數(shù)據(jù)表主鍵對應(yīng),用于建立內(nèi)存中的對象和數(shù)據(jù)庫表中記錄的對應(yīng)關(guān)系,進(jìn)而通過標(biāo)識符生成器來為主鍵賦值。   **主鍵:**Hibernate推薦在數(shù)據(jù)表中使用代理主鍵,即不具備業(yè)務(wù)含義的字段;代理主鍵通常為整數(shù)類型,因其比字符串類型要節(jié)省更多的存儲空間。   設(shè)置:在對象關(guān)系映射文件中,id元素用來設(shè)置對象標(biāo)識符,generator子元素用來設(shè)置標(biāo)識符生成器。   Hibernate提供了標(biāo)識符生成器接口IdentifierGenerator,并提供了各種內(nèi)置實現(xiàn)。 這里寫圖片描述


4. 標(biāo)識符生成器

  Hibernate提供的內(nèi)置標(biāo)識符生成器有: 這里寫圖片描述

4.1 increment標(biāo)識符生成器

  作用:由Hibernate以遞增的方式為代理主鍵賦值。   **原理:**Hibernate先讀取數(shù)據(jù)庫表中主鍵的最大值(有并發(fā)問題),執(zhí)行保存操作時即在最大值基礎(chǔ)上遞增1。   適用范圍:   1). 數(shù)據(jù)庫系統(tǒng):不依賴于底層數(shù)據(jù)庫系統(tǒng),適用于所有數(shù)據(jù)庫系統(tǒng);   2). 單進(jìn)程訪問:適用只有單個Hibernate應(yīng)用進(jìn)程訪問同一個數(shù)據(jù)庫的場合,在集群環(huán)境下不推薦使用;   3). OID定義類型:必須為long、int或short類型,若定義為byte類型,在運行時會拋出異常。

4.2 identity標(biāo)識符生成器

  原理:由底層數(shù)據(jù)庫來負(fù)責(zé)生成標(biāo)識符, 要求底層數(shù)據(jù)庫把主鍵定義為自動增長字段類型。   適用范圍:   1). 數(shù)據(jù)庫系統(tǒng):支持自動增長字段類型的數(shù)據(jù)庫,如DB2、MySQL、MSSQLServer、Sybase等;   2). OID定義類型:必須為long、int或short類型,若定義為byte類型,在運行時會拋出異常。

4.3 sequence標(biāo)識符生成器

  作用:利用底層數(shù)據(jù)庫提供的序列來生成標(biāo)識符。   原理: Hibernate在持久化對象時,先從所指定的底層數(shù)據(jù)庫序列中獲得唯一的標(biāo)識號,在將其作為主鍵值。   適用范圍:   1). 數(shù)據(jù)庫系統(tǒng):支持序列的底層數(shù)據(jù)庫,如DB2、Oracle等;   2). OID定義類型:必須為long、int或short類型,若定義為byte類型,在運行時會拋出異常。

<!-- 利用底層數(shù)據(jù)庫提供的 news_seq 序列來生成標(biāo)識符 --><id name="id"> <generator class="sequence"> <param name="sequence">news_seq</param> </generator></id>

4.4 hilo標(biāo)識符生成器

  作用:由Hibernate按照一種high/low算法生成標(biāo)識符,其從數(shù)據(jù)庫中指定表的特定字段中獲取high值。   原理: Hibernate在持久化對象時,由Hibernate負(fù)責(zé)生成主鍵值。   適用范圍:   1). 數(shù)據(jù)庫系統(tǒng):支持所有的數(shù)據(jù)庫,因其不依賴于底層數(shù)據(jù)庫系統(tǒng);   2). OID定義類型:必須為long、int或short類型,若定義為byte類型,在運行時會拋出異常。

<!-- hilo標(biāo)識符生成器在生成標(biāo)識符時,需要讀取并修改HI_TABLE表中的NEXT_VALUE值 --><id name="id"> <generator class="hilo"> <param name="table">HI_TABLE</param> <param name="colume">NEXT_VALUE</param> <param name="max_lo">10</param> </generator></id>

4.5 native標(biāo)識符生成器

  原理:依據(jù)底層數(shù)據(jù)庫對自動生成標(biāo)識符的支持能力,選擇使用identity、sequence或hilo標(biāo)識符生成器。   適用范圍:   1). 數(shù)據(jù)庫系統(tǒng):支持所有的數(shù)據(jù)庫,適合于跨數(shù)據(jù)庫平臺開發(fā);   2). OID定義類型:必須為long、int或short類型,若定義為byte類型,在運行時會拋出異常。


5. PRoperty元素

這里寫圖片描述


6. Hibernate內(nèi)置映射類型

6.1 映射類型對應(yīng)關(guān)系

這里寫圖片描述

6.2 java時間日期類型的Hibernate映射

  對應(yīng)關(guān)系:在JDBC API中,java.util.Date類是java.sql.Date、java.sql.Time和java.sql.Timestamp類的父類,分別與標(biāo)準(zhǔn)SQL類型中的DATE(日期)、TIME(時間)和TIMESTAMP(時間戳,同時包含日期和時間)類型對應(yīng)。   具體使用:設(shè)置持久化類的Date類型時,應(yīng)設(shè)置為java.util.Date,且可通過property的type屬性來將其映射為DATE、TIME或TIMESTAMP類型。 這里寫圖片描述

<!-- 強(qiáng)制將java.util.Date類映射為SQL類型中的TIMESTAMP類 --><property name="date" type="timestamp"> <column name="DATE" /></property>

7. Java大對象類型的Hiberante映射

這里寫圖片描述

<!-- 在對象關(guān)系映射文件中映射大對象 --><!-- <property name="content" type="clob"> <column name="CONTENT"></column></property><property name="image" type="blob"> <column name="IMAGE"></column></property>--><!-- 利用sql-type屬性精確映射大對象類型與MySQL類型 --><property name="content"> <column name="CONTENT" sql-type="mediumtext"></column></property><property name="image"> <column name="IMAGE" sql-type="mediumblob"></column></property>@Testpublic void testBlob() throws Exception { News news = new News(); news.setAuthor("qiaob"); news.setTitle("qiaobc"); news.setContent("I Love You!"); // 大文本 news.setDate(new Date()); // 保存大對象: private Blob image; 二進(jìn)制圖片 InputStream in = new FileInputStream("test.png"); Blob image = Hibernate.getLobCreator(session).createBlob(in, in.available()); news.setImage(image); session.save(news); // 輸出大對象 news = (News) session.get(News.class, 14); Blob image2 = news.getImage(); InputStream inputStream = image2.getBinaryStream(); System.out.println(inputStream.available());}

8. 映射組成關(guān)系

這里寫圖片描述

<!-- 在Worker.hbm.xml文件中配置映射組成關(guān)系 --><component name="pay" class="Pay"> <!-- 若Pay類中有Worker屬性時可配置 --> <parent name="worker"/> <!-- 配置組成關(guān)系的組件屬性 --> <property name="monthlyPay" column="MONTHLY_PAY" type="integer"></property> <property name="yearPay" column="YEAR_PAY" type="integer"></property> <property name="vocationWithPay" column="VOCATION_WITH_PAY" type="integer"></property></component>
上一篇:poj1321 棋盤問題

下一篇:高斯消元

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 嫩江县| 班戈县| 隆林| 黔西| 长宁县| 兴安盟| 韶关市| 宽甸| 柏乡县| 平邑县| 舟曲县| 荆门市| 彭泽县| 建水县| 广昌县| 武义县| 呼伦贝尔市| 克什克腾旗| 开江县| 定远县| 达日县| 会同县| 鱼台县| 苏尼特右旗| 澎湖县| 广饶县| 博兴县| 元阳县| 饶平县| 拜城县| 印江| 西昌市| 青川县| 淮安市| 东乌珠穆沁旗| 云梦县| 布拖县| 伊宁市| 邢台县| 哈密市| 隆林|