Hibernate配置方式

Hibernate配置方式

Hibernate給人的感受是靈活的,要達到同一個目的,我們可以使用幾種不同的辦法。就拿Hibernate配置來說,常用的有如下三種方式,任選其一。

  1. 在 hibernate.cfg.xml 中加入元素 <property>、<mapping>,放置在類路徑(classpath)的根目錄下。
  2. 將 hibernate.properties 放置放在類路徑的根目錄下。
  3. 可編程的配置方式,即在程序中配置Hibernate的啟動參數、加載映射文件,需要用Configuration接口來實現這一方式。

使用hibernate.cfg.xml是我比較喜歡的方式,一方面xml天生的優勢——良好的可讀性,讓配置的意圖一目了然。另一方面這是官方推薦使用的,如果同時在hibernate.cfg.xml和hibernate.properties對Hibernate進行了配置,那么前者將覆蓋后者。

hibernate.properties可以非常的簡潔明了,并且有一種linux配置文件的風格。以#開始一行的注釋,用鍵值對的方式存儲配置參數。

對于這兩種方式,結果都是一樣的。只是看個人喜好。關于配置參數我們稍后討論。

Configuration類

org.hibernate.cfg.Configuration實例的作用是對Hibernate進行配置,以及對它進行啟動。在Hibernate的啟動過程中,Configuration類的實例首先讀取Hibernate配置文件,加載配置信息,然后加載映射文件,創建一個SessionFactory對象。

實例被設計成啟動期間(startup-time)對象,一旦SessionFactory 創建完成它就被丟棄了。

要使用一個Configuration對象,要為它設置兩個方面的內容:

  • 數據庫連接屬性
  • hbm.xml或pojo類

Configuration常用操作函數

1.加載Hibernate配置文件

Configuration cfg=new Configuration().configure("/etc/hibernate.cfg.xml");

或者

Configuration cfg=new Configuration().configure("/etc/hibernate.properties");

2.為Configuration指定映射文件

cfg.addResource("test/User.hbm.xml");

3.為Configuration指定POJO類,Order.hbm.xml根Order.java一個目錄

cfg.addClass(test.Order.class);

4.為Configuration指定Hibernate配置屬性,當然我們加載了配置文件就不能使用這個方法了

1
2
3
4
5
Configuration cfg = new Configuration()
????.addClass(test.User.class)
????.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
????.setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
????.setProperty("hibernate.order_updates", "true");

5.獲得SessionFactory

SessionFactory sessions = cfg.buildSessionFactory();

當所有映射定義被 Configuration 解析后,應用程序必須獲得一個用于構造org.hibernate.Session 實例的工廠SessionFactory。這個工廠將被應用程序的所有線程共享,線程安全的全局對象,只需要被實例化一次。單例模式。

Hibernate 允許你的應用程序創建多個SessionFactory 實例。這對 使用多個數據庫的應用來說很有用。

hibernate.cfg.xml

hibernate.cfg.xml在文檔開頭的DTD(文檔類型定義)是很復雜的。我們并不需要去理會和記憶他。你可以直接copy它。

hibernate.cfg.xml文檔以<hibernate-configuration>為根元素,你可以在其子元素<session-factory>中

  • 加入<property>元素來配置各種參數。
  • 加入<mapping>加載映射文件,resource代表映射文件的路徑。

一個hibernate.cfg.xml例子:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
????<session-factory>
????????<!-- Database connection settings -->
????????<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
????????<property name="connection.username">root</property>
????????<property name="connection.password">klguang@mysql</property>
????????<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
????????<!-- SQL dialect -->
????????<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
????????<!-- JDBC connection pool (use the built-in) -->
????????<property name="connection.pool_size">10</property>
????????<!-- Enable Hibernate's automatic session context management -->
????????<property name="current_session_context_class">thread</property>
????????<!-- Disable the second-level cache -->
????????<property name="cache.provider_class">
????????????org.hibernate.cache.NoCacheProvider
????????</property>
????????<!-- Echo all executed SQL to stdout -->
????????<property name="show_sql">true</property>
????????<!-- Drop and re-create the database schema on startup -->
????????<property name="hbm2ddl.auto">update</property>
????????<property name="javax.persistence.validation.mode">none</property>
????????<mapping resource="hbm/User.hbm.xml" />
????????<mapping resource="hbm/Event.hbm.xml" />
????????<mapping resource="hbm/Person.hbm.xml" />
????</session-factory>
</hibernate-configuration>
<br>

hibernate.properties

對于hibernate.properties作為配置文件的方式,我是不推薦新手使用的。因為,其可讀性差,另外眾多的配置參數會讓初學者不知道如何下手。

在Hibernate發布包的project/etc/,提供了一個hibernate.properties文件,該文件列出了Hibernate 的所有配置參數,但都是用#注釋掉了。每一行是一個配置參數,以鍵值對的方式存在,空格前是key,空格后是value,我們應該將空格改為等號。

對每一個配置參數,文件里都有詳細的解釋。我們只需要將見面#去掉,并修改其value就可以了。

一個hibernate.properties例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#數據庫使用的驅動類
hibernate.connection.driver_class=com.mysql.jdbc.Driver
#數據庫連接串
hibernate.connection.url=jdbc:mysql://localhost:3306/db
#數據庫連接的用戶名
hibernate.connection.username=user
#數據庫連接的密碼
hibernate.connection.password=password
#數據庫使用的方言
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
#是否打印SQL語句
hibernate.show_sql=true
javax.persistence.validation.mode=none

hibernate.properties沒有提供加載映射文件的方式。因此需要通過Configuration的.addResource()方法來加載映射文件或POJO類,Hibernate會自動找到另一方,前提映射文件和POJO類在同一包(目錄)中。

1
2
3
4
Configuration cfg = new Configuration();
cfg.configure("/etc/hibernate.properties");
cfg.addResource("test/User.hbm.xml");
cfg.addClass(test.Order.class);

Hibernate配置參數詳解

Hibernate JDBC 屬性

屬性名

用途

hibernate.connection.driver_class

JDBC driver class

hibernate.connection.url

JDBC URL

hibernate.connection.username

database user

hibernate.connection.password

?數據庫用戶密碼

hibernate.connection.pool_size

maximum number of pooled connections

Hibernate 數據源屬性

屬性名

用途

hibernate.connection.datasource

數據源?JNDI 名字

hibernate.jndi.url JNDI

提供者的?URL(可選)

hibernate.jndi.class JNDI

InitialContextFactory 類(可選)

hibernate.connection.username

?數據庫用戶(可選)

hibernate.connection.password

數據庫密碼(可選)

可選的配置屬性

有大量屬性能用來控制 Hibernate 在運行期的行為。它們都是可選的,并擁有適當的默認值。

屬性名

用途

可選值

()內為默認

hibernate.dialect

允許?Hibernate?針對特定的關系數據庫生成優化的?SQL?org.hibernate.dialect.Dialect?類名。

例如:org.hibernate.dialect.MySQLDialect

?

hibernate.show_sql

輸出所有?SQL?語句到控制臺。

true|false

false

hibernate.format_sql

?log??console?中打印出更漂亮的?SQL

true|false

false

hibernate.default_catalog

?在生成的?SQL?中,將給定的?catalog?附加于非全限定名的表名上

?

hibernate.session_factory_name

org.hibernate.SessionFactory?創建后,將自動使用這個名字綁定到?JNDI?中。

?

hibernate.max_fetch_depth

為單向關聯(一對一,多對一)的外連接抓取(outer join fetch)樹設置最大深度。

03

hibernate.default_batch_fetch_size

??Hibernate?關聯的批量抓取設置默認數量。

4816

hibernate.default_entity_mode

?為由這個?SessionFactory?打開的所有?Session指定默認的實體表現模式。

dynamic-mapdom4jpojo

hibernate.order_updates

?強制?Hibernate?按照被更新數據的主鍵,為SQL?更新排序。這么做將減少在高并發系統中事務的死鎖。

true|false

?

hibernate.generate_statistics

?如果開啟,Hibernate?將收集有助于性能調節的統計數據。

true|false

?

hibernate.use_identifier_rollback

如果開啟,在對象被刪除時生成的標識屬性將被重設為默認值。

true|false

?

hibernate.use_sql_comments

如果開啟,Hibernate?將在?SQL?中生成有助于調試的注釋信息,默認值為?false

true|false

false

Hibernate JDBC 和連接(connection)屬性、Hibernate 緩存屬性、Hibernate 事務屬性等主要用于提升性能,并且Hibernate有適當的默認值。入門者可以忽略這些設置,等學到一定階段,你可以參考官方文檔進行適當配置。

轉載于:https://www.cnblogs.com/w-wfy/p/6254048.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371714.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371714.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371714.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js中 javascript:void(0) 用法詳解

javascript:void(0)表示不做任何動作。如&#xff1a; 復制代碼代碼如下:<a href"javascript:void(0);" οnclick"alert(ok);"></a> 這里表示這個鏈接不做跳轉動作&#xff0c;執行onClick事件。 我想使用過ajax的都常見這樣的代碼&#xff1…

帶有ActiveMQ的JMS

帶有ActiveMQ的JMS JMS是Java Message Service的縮寫&#xff0c;它提供了一種以松散耦合&#xff0c;靈活的方式集成應用程序的機制。 JMS以存儲和轉發的方式跨應用程序異步傳遞數據。 應用程序通過充當中介的MOM&#xff08;面向消息的中間件&#xff09;進行通信&#xff0c…

矩陣分解 java_使用矩陣分解為推薦系統

矩陣分解假設“潛在因素”&#xff0c;例如對用戶的意大利食物的偏好和項目食物的意外性與矩陣中的評級有關 .因此&#xff0c;整個問題類型轉變為矩陣重構問題&#xff0c;存在許多不同的解決方案 . 一個簡單的&#xff0c;可能很慢的解決方案是(除了ALS和其他一些矩陣重建的可…

用戶故事排球教練助手

計劃&#xff1a;估計這個任務需要一周時間 需求分析&#xff1a;作為一名排球教練助手&#xff0c;我需要了解每場每位隊員的技術動作&#xff0c;每場比賽每位隊員的得分情況&#xff0c;以便教練更好的了解到每位隊員的發揮情況和特長。 設計文檔&#xff1a;用戶進入此界面…

TMS320DM642學習----第一篇(硬件連接)

DSP設備型號&#xff1a;SEED-DTK-VPM642&#xff08;目前實驗室用途&#xff1a;視頻處理&#xff0c;圖像處理方向&#xff0c;預計搭載目標跟蹤以及云臺防抖等算法&#xff09; 官網鏈接&#xff1a;http://www.seeddsp.com/index.php/Home/Product/detail/name/1/id/174.ht…

字符串內存內部

本文基于我對StackOverflow的回答 。 我正在嘗試解釋String類如何存儲文本&#xff0c;內部存儲和常量池如何工作。 這里要理解的要點是String Java對象與其內容– private value字段下的char[]之間的區別。 String基本上是char[]數組的包裝器&#xff0c;將其封裝并使其無法修…

關于inline-block 元素之間為何會產生間隔

關于inline-block 元素之間為何會產生間隔 現象&#xff1a; <body><input type"text"><input type"text"> </body> 在瀏覽器中的表現&#xff1a; 實時上不僅僅是 inline-block 會導致這種現象。 inline 也會導致。 那問題來了&a…

java 入參 是 枚舉_java 枚舉 參數傳遞

展開全部這樣做是不行的&#xff0c;原因是&#xff1a;Java中的對象實例化都是在堆中&#xff0c;如果是普通的類實例變量&#xff0c;比如在方法636f707962616964757a686964616f313333376166371中定義的普通類實例變量&#xff0c;傳到了方法2中&#xff0c;由于方法1和方法2…

loadView的使用總結

一、loadView 1. loadView什么時候被調用&#xff1f; 每次訪問UIViewController的view&#xff08;如 controller.view、self.view&#xff09;并且view為nil&#xff0c;loadView方法就會被調用 2. 有什么作用 loadView 方法是用來負責創建UIViewController的view 3. 默認實…

數據庫備份 java jar_Java實現數據庫備份并利用ant導入SQL腳本

?數據備份對于經常在運維部署方面的工作者來說&#xff0c;是一件相對簡單的事情&#xff0c;都可以通過某一個SQL工具進行備份&#xff0c;但是如果在項目運行當中&#xff0c;我們需要對數據進行實時&#xff0c;或者是每隔一星期&#xff0c;一個月&#xff0c;等等進行數據…

JSF簡單Ajax示例

今天&#xff0c;我們將看到一些使用JSF的Ajax簡單樣本。 如果要查看有關JSF / Web應用程序的其他文章&#xff0c;請單擊以下鏈接&#xff1a; 重定向后的JSF持久化對象和消息 &#xff0c; 使用JAAS和JSF進行用戶登錄驗證 &#xff0c; JSF&#xff1a;Converter and Bean Au…

常用的好用的window工具

1. FastStone Capture截圖錄屏軟件 百度軟件中心&#xff1a;http://rj.baidu.com/soft/detail/13504.html?ald 注冊企業版&#xff1a; 用戶名&#xff1a;c1ikm 注冊碼&#xff1a;AXMQX-RMMMJ-DBHHF-WIHTV 中文輸入亂碼解決方法&#xff1a; 2. Notepad文本編輯器&#xff…

表分區

http://www.cnblogs.com/leestar54/p/6225821.html轉載于:https://www.cnblogs.com/jouny/p/6262850.html

java飛鴿傳書_feige 飛鴿傳書源代碼java 實現不錯的聯系網絡編程的資料飛鴿傳書的GUI(java實現) - 下載 - 搜珍網...

我的飛鴿傳書/FileFilter.java我的飛鴿傳書/FileNameExtensionFilter.java我的飛鴿傳書/飛鴿傳書/classes/feige/About.class我的飛鴿傳書/飛鴿傳書/classes/feige/ConnectOthers$ReadMessageThread.class我的飛鴿傳書/飛鴿傳書/classes/feige/ConnectOthers.class我的飛鴿傳書…

JAXB和根元素

XmlRootElement是人們習慣于與JAXB&#xff08;JSR-222&#xff09;一起使用的注釋。 目的是將根元素與類唯一關聯。 由于JAXB類映射到復雜類型&#xff0c;因此一個類有可能對應于多個根元素。 在這種情況下&#xff0c;無法使用XmlRootElement &#xff0c;人們開始感到有些困…

python socket模塊實現udp通信_Python基于socket模塊實現UDP通信功能示例

Python基于socket模塊實現UDP通信功能示例本文實例講述了Python基于socket模塊實現UDP通信功能。分享給大家供大家參考&#xff0c;具體如下&#xff1a;一 代碼1、接收端import socket#使用IPV4協議&#xff0c;使用UDP協議傳輸數據ssocket.socket(socket.AF_INET, socket.SOC…

Hibernate緩存基礎知識

最近&#xff0c;我嘗試了休眠緩存。 在這篇文章中&#xff0c;我想分享我的經驗&#xff0c;并指出Hibernate Second Level Cache的一些細節。 在此過程中&#xff0c;我將指導您閱讀一些有助于實現緩存的文章。 讓我們從地面開始。 在休眠狀態下緩存 緩存功能旨在減少必要的…

TP3.2之WHERE組合條件處理

1、條件都是int類型&#xff1a; $User->where(type1 AND status1)->select(); 2、條件包含字符串類型&#xff1a; 使用3.1以上版本的話&#xff0c;使用字符串條件的時候&#xff0c;建議配合預處理機制&#xff0c;確保更加安全&#xff0c; $Model->where("i…

linux-ssh遠程后臺執行腳本-放置后臺執行問題(轉)

寫了一個監控負載的小腳本&#xff08;死循環&#xff0c;測試結束后再kill對應進程&#xff09;&#xff0c;因需要監控多臺服務器&#xff0c;所以在一臺服務器上使用ssh統一執行腳本遇到問題&#xff1a;使用ssh root172.16.146.20 /usr/local/luly/loadavg.sh 2 2 &執行…