Hibernate 主配置文件

maven 導(dǎo)入

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.2.Final</version>
        </dependency>

Hibernate 主配置文件

配置文件主要配置三方面的信息

  • 連接數(shù)據(jù)庫的基本信息:驅(qū)動(dòng)谒出、URL忧饭、用戶名逾滥、密碼
  • Hibernate 框架特性
  • 注冊映射文件徐勃,即指定映射文件的位置

對于<session-factory> 標(biāo)簽羡儿,可以包含多個(gè) <property> 元素礼患,用于配置 hibernate 與 DB 的連接信息及數(shù)據(jù)源信息;可以包含多個(gè) <mapping> 元素掠归,用于注冊多個(gè)映射文件缅叠。

<session-factory>
DB 的連接信息
Hibernate 特性
注冊映射文件
</session-factory>

數(shù)據(jù)庫連接設(shè)置

在數(shù)據(jù)庫連接四要素的 name 屬性名稱,cooection.* 與 hibernate.connection.* 的效果完全相同的虏冻,是為了兼容以前的版本
在數(shù)據(jù)庫連接的 url 屬性值的設(shè)置肤粱,一般寫法是

jdbc:mysql://localhost:3306/database_name
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hibernatelearning"/>
<property name="username" value="root"/>
<property name="password" value="root"/>

方言設(shè)置

方言的試著信息可以從 Hibernate 核心 jar 文件 hibernate-core-5.0.1.Final.jar 中的 org.hibernate.dialect 包中找到相應(yīng)的類。賦值全類名即可為方言的值厨相。

自動(dòng)建表設(shè)置

  • create: 每次加載主配置文件時(shí)都會刪除上一次的生成的表领曼,然后再生成新表,哪怕兩次表結(jié)構(gòu)沒有任何變化蛮穿。
  • create-drop:每次加載主配置文件時(shí)會生成表庶骄,但是 sessionFactory 一旦關(guān)閉,表就自動(dòng)刪除践磅。
  • update:當(dāng)表字段增加時(shí)单刁,會添加字段:當(dāng)表字段減少時(shí),不會減少字段府适。若表結(jié)構(gòu)沒有變化羔飞,但數(shù)據(jù)變化時(shí)肺樟,會修改數(shù)據(jù)。

數(shù)據(jù)庫連接池配置

Hibernate 5 默認(rèn)使用的是其自己開發(fā)的內(nèi)置連接池逻淌。該連接池只是讓調(diào)試代碼時(shí)使用么伯,在真正產(chǎn)品中不能使用】ㄈ澹可以從控制臺的 Hibernate 啟動(dòng)信息中查看到蹦狂。

工業(yè)生產(chǎn)中,常用的數(shù)據(jù)源有 DBCP朋贬、C3P0 等凯楔。

注冊映射文件

映射文件若存在多個(gè),則可寫多個(gè)<mapping>

映射文件詳解

配置映射文件锦募,即配置兩個(gè)關(guān)系:

  • 實(shí)體類與數(shù)據(jù)庫中表的映射關(guān)系
  • 屬性與表中字段的映射關(guān)系

<hibernate-mapping> 標(biāo)簽

該標(biāo)簽是 Hibernate 映射文件的根元素摆屯,其下可以包含多個(gè) <class>標(biāo)簽。常用的屬性主要是 package 屬性糠亩,用于指定其所包含的 <class> 類所在的包
例如

<hibernate-mapping>
    <class name="com.draper.domain.User" table="huser">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
    </class>
</hibernate-mapping>

<class>標(biāo)簽

該標(biāo)簽用于設(shè)置 PO 類與數(shù)據(jù)表之間的映射關(guān)系

  • name 屬性: 指定持久化類虐骑。若 <hibernate-mapping/>標(biāo)簽設(shè)置了 package 屬性,那么赎线,此處的 name 只需是類名極客廷没;否則需要完整包名
  • table 屬性:指定持久化類對應(yīng)的數(shù)據(jù)表名稱。若不指定垂寥,Hibernate 將默認(rèn)為表名與類名相同颠黎。
  • catalog: 指定數(shù)據(jù)庫。默認(rèn)為配置文件中指定的 DB滞项。

<id><property>標(biāo)簽

他們都是 <class> 標(biāo)簽的子標(biāo)簽狭归。用于指定 PO 類的 id 屬性與表的主鍵之間的映射關(guān)系,他們的屬性基本相同文判。常用的有:

  • name 屬性:指定持久化類的屬性名
  • column 屬性:指定數(shù)據(jù)表中與 name 屬性對應(yīng)的字段名过椎。若不指定,默認(rèn)為與 name 屬性同名戏仓。
  • length 屬性:指定屬性所映射字段的長度疚宇,單位字節(jié)。
  • not-null 屬性:為指定的字段添加非空約束赏殃。
  • type 屬性:指定屬性所映射的字段的類型敷待。若省略 Hibernate 會自動(dòng)從持久化類中檢測到類型。這里的類型取值支持兩大類:Java 類型與 Hibernate 類型嗓奢。Java 類型值得是 Java 中代碼中的類型讼撒。若是基本數(shù)據(jù),如 int股耽、double 等根盒,直接寫即可。但若是對象類型物蝙,則需要寫上全類名炎滞,如 java.lang.String。

Hibernate 類型是指 Hibernate 中定義的類型诬乞。

  • PO 中屬性類型為 boolean册赛,type 也可指定為 boolean,但數(shù)據(jù)庫中的類型為 bit(二進(jìn)制位)震嫉。0 代表 false森瘪,1 代表 true。
  • PO 中屬性類型為 byte[]票堵,則這里的 type 應(yīng)指定為 binay

sql-type 屬性:當(dāng)然映射文件中最短類型還支持一種類型扼睬,即數(shù)據(jù)庫中數(shù)據(jù)類型。但這種類型的使用悴势,需要使用 <column> 元素窗宇,其中有一個(gè) sql-type 屬性用于指定字段類型。其值為所使用的 DBMS 的數(shù)據(jù)類型特纤。


Hibernate 常用內(nèi)置主鍵生成策略

increment 生成策略

該策略是 Hibernate 自己在維護(hù)主鍵的值军俊。當(dāng)準(zhǔn)備在數(shù)據(jù)庫表中插入一條新記錄時(shí),首先從數(shù)據(jù)庫表中獲取當(dāng)前主鍵的最大值捧存,然后在最大值基礎(chǔ)上加 1粪躬,作為新插入記錄的主鍵值,這就是 increament 生成策略昔穴。
勇氣生成的主鍵字段所對應(yīng)的屬性類型可以是 long短蜕、short、int 及其封裝類的類型傻咖。這種生成策略只有在沒有其他進(jìn)程向同一張表中插入數(shù)據(jù)時(shí)才能使用朋魔。在高并發(fā)下或集群下不能使用。

identiry 生成策略

該策略使用數(shù)據(jù)庫自身的增長來維護(hù)主鍵值卿操。如 mysql 使用 auto_increment 來維護(hù)警检。用其生成的逐漸字段所對應(yīng)的屬性類型可以使 long、short害淤、int 及其封裝類的類型扇雕。
該策略在生成主鍵值時(shí)會出現(xiàn)以下的情況:對于插入操作,即使最后的執(zhí)行是回滾窥摄,DB 中記錄主鍵值的變量也會增一因?yàn)槠涫褂玫氖?MySQL 自身的 auto_increment 來為 id 賦值镶奉。

sequence 生成策略

在 Oracle、DB2 和 PostgreSQL 等數(shù)據(jù)庫中創(chuàng)建一個(gè)序列(sequence),然后 Hibernate 通過該序列為當(dāng)前記錄獲取主鍵值哨苛,從而為實(shí)體對象賦予主鍵字段映射屬性值鸽凶。此 sequence 生成策略,用其生成的主鍵字段映射屬性的類型可以使 long建峭、hort玻侥、int 及其封裝的類的類型。

antive 生成策略

由 Hibernate 根據(jù)所使用的數(shù)據(jù)庫支持能力從 identity亿蒸、sequence 生成策略中選擇一種凑兰。
使用這種表示服屬性生成策略可以根據(jù)不同的數(shù)據(jù)庫采用不同的生成策略,如 Oracle 中使用 sequence边锁,在 MySQL 中使用 identity 便于 Hibernate 應(yīng)用在不同的數(shù)據(jù)庫之間移植姑食。
測試情況是,沒有生成任何與 id 生成有關(guān)的 SQL 語句茅坛。說明使用的是 identity 生成策略音半。

uuid 生成策略

uuid生成策略采用 UUID算法來生成一個(gè)字符串類型的主鍵值,該值使用 IP 地址灰蛙、JVM 的啟動(dòng)時(shí)間(精確到 1/4秒)祟剔、系統(tǒng)時(shí)間和一個(gè)計(jì)數(shù)器值(在當(dāng)前的 JVM中唯一)經(jīng)過計(jì)算 產(chǎn)生,可以用于分布式的 Hibernate 應(yīng)用中摩梧。產(chǎn)生的標(biāo)識符屬性是一個(gè) 32 位長度的字符串物延。 使用這種生成策略,要求屬性的類型必須為 String類型仅父。 這種標(biāo)識符屬性生成策略生成的數(shù)值可以保證多個(gè)數(shù)據(jù)庫之間的唯一性叛薯,并且由于其 生成與具體的數(shù)據(jù)庫沒有關(guān)系,所以其移植性較強(qiáng)笙纤。但由于該值是 32 位長的字符串耗溜,所以 占用的數(shù)據(jù)庫空間較大,并且檢索速度較慢省容。不過抖拴,實(shí)際開發(fā)中使用這種生成策略較多。 除了使用 Hibernate 外腥椒,在 JDBC 中也可以使用 uuid 生成主鍵阿宅。因?yàn)?UUID 是 java.util 包中的一個(gè)獨(dú)立的類×耄可以打開項(xiàng)目的 JRE System Library 庫中的 rt.jar洒放,在其中找到 java.util 包,即可看到 UUID這個(gè)類

所有生成策略如下顯示

<class name="com.draper.domain.User" table="user">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
</class>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滨砍,一起剝皮案震驚了整個(gè)濱河市往湿,隨后出現(xiàn)的幾起案子妖异,更是在濱河造成了極大的恐慌,老刑警劉巖领追,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件他膳,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔓腐,警方通過查閱死者的電腦和手機(jī)矩乐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門龄句,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回论,“玉大人,你說我怎么就攤上這事分歇】兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵职抡,是天一觀的道長葬燎。 經(jīng)常有香客問我,道長缚甩,這世上最難降的妖魔是什么谱净? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮擅威,結(jié)果婚禮上壕探,老公的妹妹穿的比我還像新娘。我一直安慰自己郊丛,他們只是感情好李请,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厉熟,像睡著了一般导盅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揍瑟,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天白翻,我揣著相機(jī)與錄音,去河邊找鬼绢片。 笑死滤馍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杉畜。 我是一名探鬼主播纪蜒,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼此叠!你這毒婦竟也來了纯续?” 一聲冷哼從身側(cè)響起随珠,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猬错,沒想到半個(gè)月后窗看,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倦炒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年显沈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逢唤。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拉讯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳖藕,到底是詐尸還是另有隱情魔慷,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布著恩,位于F島的核電站院尔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喉誊。R本人自食惡果不足惜邀摆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伍茄。 院中可真熱鬧栋盹,春花似錦、人聲如沸幻林。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪饺。三九已至躏敢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間整葡,已是汗流浹背件余。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遭居,地道東北人啼器。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像俱萍,于是被迫代替她去往敵國和親端壳。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容