3.hibernate的相關(guān)標(biāo)簽(hibernate筆記)

首先補充一點:hibernate支持JNDI、JDBC、JTA接口,其中JDBC是本地事務(wù),即只對比如MySQL中的一個數(shù)據(jù)庫起作用,而JTA是全局事務(wù),如對MySQL中的兩個數(shù)據(jù)庫aa和bb都起作用。

一、hibernate的標(biāo)簽

1.1hibernate基本映射

實體類<-->表
實體類中的普通屬性<-->表字段
采用<class>標(biāo)簽進(jìn)行映射成數(shù)據(jù)庫表,通過<property>標(biāo)簽將普通屬性(即一些數(shù)組、集合等)映射成表字段

  • auto-import,package屬性:
    Query query = session.createQuery("from User");中如果我們將屬性auto-import設(shè)置為false,則User必須加上完整的包名,當(dāng)然默認(rèn)是true,即自動導(dǎo)入。在User.hbm.xml中如果我們在<hibernate-mapping>中加上package="cn.itcast.hibernate",則后面的class標(biāo)簽中就不需要加包名了。
    如:
<hibernate-mapping package="cn.itcast.model">
    <class name="User" table="_user">
        <id name="id" length="36"></id>
        <property name="name" unique="true" not-null="true" length="20"></property>
        <property name="password" not-null="true" length="10"></property>
        <property name="createTime"></property>
        <property name="expireTime"></property>
    </class>
</hibernate-mapping>
  • table 屬性:
    在實體類中實體名是User,當(dāng)我們不指定table時默認(rèn)表明也是User,但是我們也可以使用table標(biāo)簽指定表名<class name="User" table="_user">

  • dynamic-update 和 dynamic-insert 屬性:
    第一個屬性如果設(shè)置為false則在我們使用updata操作的時候它只發(fā)出變化字段的sql語句。但是這樣做也有缺點,因為如果一條語句沒有變化,那么這條語句就不能執(zhí)行,比如我們之前可以多次運行testSave方法生成同樣的數(shù)據(jù),但是只有主鍵不一樣,如果設(shè)置了第一個屬性為false,那么就不行了。第二條語句類似。

  • id 標(biāo)簽:
    這里表示的是單一主鍵,如果有多個主鍵,那么就需要使用復(fù)合主鍵了,以后再說。

  • name屬性
    指定類中的屬性,默認(rèn)是字段名,可以使用column進(jìn)行重命名字段名。

  • type屬性
    默認(rèn)會將String轉(zhuǎn)換為數(shù)據(jù)庫中的varchar,將Java中的Date轉(zhuǎn)換為數(shù)據(jù)庫中的日期類型。我們也可以使用此屬性指定轉(zhuǎn)換的類型。

  • lenth屬性
    默認(rèn)String轉(zhuǎn)換為varchar是255,但是這里我們可以使用此屬性指定長度。

1.2 generator 標(biāo)簽

  • 在Hibernate中主鍵必須配置生成策略。生成策略有increment、identity、sequence。

  • increment表示可以自增,從一開始。自增在本數(shù)據(jù)庫中是不會重復(fù)的,但是在數(shù)據(jù)庫集群中很可能會產(chǎn)生重復(fù)。

  • identity表示使用數(shù)據(jù)庫系統(tǒng)(如mysql)的自增,但是如果換成Orecla的話就會出現(xiàn)問題。如果是Orecla則需要配置為sequence屬性。同時如果設(shè)置為identity的話則id必須是數(shù)值型,不能是String。

  • 編碼類型
    uuid:這是很常用的。是一個32位的字符串,是Hibernate生成的,一般是不會重復(fù)的。一般我們給出長度為36。
    guid:在mysql和sql Server中使用,
    native:也表示自增,但是會根據(jù)數(shù)據(jù)庫的類型選擇identity或sequence。
    assigned:讓應(yīng)用程序在save之前為對象分配一個標(biāo)識符。這樣需要手動生成主鍵。即手動給主鍵一個值。

  • 說明:一般我們都選擇手動生成主鍵,即使用assigned。

1.3 property 標(biāo)簽:

  • column和上面的類似。
  • unique屬性:設(shè)置唯一性,即不允許重復(fù)。
  • not-null屬性:非空設(shè)置。
  • length:長度

1.4 注意

  • 類名不能是數(shù)據(jù)庫中的關(guān)鍵字。同時類中的屬性也不能和數(shù)據(jù)庫中的關(guān)鍵字重名。

  • 實體類的設(shè)計原則
    必須要有一個無參的構(gòu)造方法。
    提供一個標(biāo)識屬性(identifier property)(可選)
    使用非final的類(可選)
    為持久化字段聲明訪問器(accessors)。
    生成getter和setter方法。(可選)

  • 我們每次在運行ExportDB.java這個類的時候都會重建表,會將之前的數(shù)據(jù)清掉。這里我們?nèi)绻赶蜃兏兓说臄?shù)據(jù),則需要配置一個屬性(在Hibernate的配置文件中)<property name="hibernate.hbm2ddl.auto">update</property>。如果沒有發(fā)生改變則不會進(jìn)行重建。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,728評論 18 399
  • 目錄 1. Hibernate框架的概述 1.1 Hibernate簡介 1.2 為什么要學(xué)習(xí)Hibernate ...
    深海魚Q閱讀 1,121評論 0 14
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,012評論 0 11
  • Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,它將POJO與數(shù)據(jù)庫...
    蘭緣小妖閱讀 1,283評論 1 18
  • 經(jīng)常在網(wǎng)上看到婆媳不合的各種案例,總是讓我更多的想起平日里婆婆的好,更加的覺得自己的幸運。人們常說婆媳難相處,婆媳...
    晴兒在此閱讀 572評論 6 8

友情鏈接更多精彩內(nèi)容