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

首頁 > 學院 > 開發設計 > 正文

Hibernate(三)結構-配置文件-實體映射及配置文件

2019-11-14 23:13:57
字體:
來源:轉載
供稿:網友
Hibernate(三)結構-配置文件-實體映射及配置文件一、體系結構

  • sessionFactory:屬于單一數據庫的編譯過的映射文件的一個線程安全的,不可變的緩存快照。Session的工廠。有可能持有一個可選的數據緩存可以進程級別或者群級別保存可以在事務中重用數據。
  • 會話,Session:單線程,生命期短促的對象,代表應用程序和持久化層之間的一次對話。封裝了一個JDDBC連接,它也是Transaction的工廠,保存有必須持久化對象的緩存,用于遍歷對象,或者通過標識符查找對象。
  • 持久化對象(Persistent Object)及其集合(Collection):生命期短促的單線程對象,包含了持久化狀態和商業功能。變通的javaBeans/POJOs.(Plain Old Java Objects, 簡單潔凈Java對象)有時候也稱作Plain Ordinary Java Objects,表示一個數據集合。唯一特別的是他們現在從屬于一個Session,一旦Session被關閉,它們都將從Session中取消聯系,可以在任何程序層自由使用如:直接作為傳送到表現層的DTO(即數據傳輸對象),數據傳輸對象。
  • 臨時對象(Transient Object)及其集合(Collection):目前沒有從屬于一個Session的持久化類的實例。可能是剛剛被程序實例化,還沒有來得及被持久化,或者是被一個已經關閉的Session所實例化,臨時對象。
  • 事務,Transaction:(可選)單線程生命期短促的對象,應用程序用它來表示一批工作的原子操作。是底層的JDBC,JTA或者CORBA事務的抽象。JTA,即Java Transaction API,JTA允許應用程序執行分布式事務處理——在兩個或多個網絡計算機資源上訪問并且更新數據。JDBC驅動程序的JTA支持極大地增強了數據訪問能力.CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構,通用對象請求代理體系結構).一個Seesion在某些情況下可能跨越多個Transaction事務
  • ConnectionPRovider:(可選)JDBC連接的工廠和池。從底層的DateSource或者DriverManager抽象而來。對應程序不可見,但可以被開發都擴展和實現。
  • TransactionFactory:(可選)事務的實例工廠。對應用程序不可見,同樣可以被開發都擴展和實現。
二、配置文件---xml格式

配置文件默認為:hibernate.cfg.xml

Hibernater初始化期間會自動在CLASSPATH中尋找這個文件,并讀取其中的配置信息,為后期數據庫操作做好準備。

配置文件應部署在CLASSPATH中,對于Web應用而言,配置文件應放置在/WEB-INF/classes,目錄下

配置文件內容:

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration>    <session-factory>        <!--方言 -->        <property name="dialect">            org.hibernate.dialect.Oracle9Dialect        </property>        <!--數據庫URL -->        <property name="connection.url">            jdbc:oracle:thin:@localhost:1521:orcl        </property>        <!--數據庫訪問的用戶名 -->        <property name="connection.username">accp</property>        <!--數據庫訪問的用戶名的密碼 -->        <property name="connection.passWord">accp</property>        <!--數據庫驅動這里是oracle數據庫的 -->        <property name="connection.driver_class">            oracle.jdbc.OracleDriver        </property>        <property name="myeclipse.connection.profile">oracle</property>        <!--是否顯示執行的SQL語句 -->        <property name="show_sql">true</property>        <!--是否使用數據庫外連接 -->        <property name="hibernate.use_outer_join">true</property>        <!--事務管理類型 -->        <property name="hibernate.transaction.factory_class">            net.sf.hibernate.transaction.JDBCTransactionFactory        </property>        <!--映射文件配置 -->        <mapping resource="com/pb/entity/Login.hbm.xml" />    </session-factory></hibernate-configuration>
三、實體映射

在Hibernate中的對象關系映射就是把實體類與數據庫中的表相對應,實現實體類中的屬性與數據庫表中的字段一一對應

映射是按照持久化類(實體類)的定義一創建的,而非表的定義。

配置文件可以手動寫,也可以使用工具生成 如:MyEclipse生成實體類時,可以自動生成配置文件

配置文件名字:類名.hbm.xml

<?xml version='1.0' encoding='utf-8'?> <!-- 這里與hibernate.cfg.xml配置文件不一樣注意 --><!DOCTYPE hibernate-mapping PUBLIC            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- 這里與hibernate.cfg.xml配置文件不一樣注意 --><hibernate-mapping> <!--類名和數據庫中的表名相對應 哪個用戶 -->    <class name="com.pb.entity.Login" table="LOGIN" schema="accp">      <!-- id代表主鍵  column列表 type代表數據類型-->        <!-- 類中的屬性 -->        <id name="username" type="java.lang.String">         <!-- 表中哪一個字段或者是列名 -->            <column name="USERNAME" length="20" />            <!--生成的方式  assigned代表由外部外部程序負責生成,在 save() 之前必須指定一個-->        <!--  native由hibernate根據使用的數據庫自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式,靈活性很強。如果能支持identity則使用identity,如果支持sequence則使用sequence。-->            <generator class="assigned" />        </id>        <!-- 密碼段設置 -->        <!--類中的名字和數據類型  -->        <property name="password" type="java.lang.String">        <!-- 表中的字段名,長度可心不要,是不為空true為不能為空,false是可以為空 -->            <column name="PASSWORD" length="20" not-null="true"/>        </property>        <!--如果還有其它的屬性,設置方式與password一樣設置  -->    </class></hibernate-mapping>

四、Hibernate 可選配置4.1、Hibernate 配置項

(1)hibernate.dialect 指定方言后,Hibernate 可以根據低層數據庫自動產生優化過的SQL。取值為org.hibenate.dialect.Dialect 的繼承類。多數情況下,Hibernate

可以根據低層JDBC 返回的metadata 來判斷。

(2)hibernate.show_sql 打印所有的SQL 語句到控制臺,可以通過設置org.hibernate.SQL 類的日志策略到DEBUG 級,實現同樣的效果。取值true|false。

(3)hibernate.format_sql 格式化SQL 語句在打印到控制臺或寫入日志文件時。取值true|false。

(4)hibernate.default_schema 在產生SQL 語句時,在表名前加上映射文件給出的表空間(tablespace)或數據庫模式(schema)。取值SCHEMA_NAME。

(5)hibernate.default_catalog 在產生SQL 語句時,在表名前加上映射文件給出的catalog。取值CATALOG_NAME。

(6)hibernate.session_factory_name Hibernate 創建org.hibernate.SessionFactory實例后后會自動的將這個綁定到JNDI 中的名字上。取值jndi/sf。

(7)hibernate.max_fetch_depth 設置對單個表的外連接數最大深度。0是屏蔽默認的外連接設置。推薦設置為0到3之間。

(8)hibernate.default_batch_fetch_size 設置Hibernate 批量聯合查詢的尺度。強烈建議。推薦設置為4、8、16。

(9)hibernate.default_entity_mode 默認的實體表現模式,通過SessionFactory打開的所有的Session。取值,dynamic-map、dom4j、pojo。

(10)hibernate.order_updates 強迫Hibernate 通過被更新項的主鍵值排序SQL更新。這樣可以在高并發時,減少事務死鎖。取值true|false。

(11)hibernate.generate_statistics 如果設置為true,Hibernate 將為性能調整,收集統計信息。取值true|false。

(12)hibernate.use_identifier_rollback 如果設置為true,產生的標識屬性將被重置成默認值,當對象被刪除后。取值為true|false。

(13)hibernate.use_sql_comments 如果設置為true,Hiberante 將為SQL 產生注釋,這樣更利于調試。默認值為 false。取值為true|false。

4.2、Hibernate JDBC 和連接的屬性

( 1 ) hibernate.jdbc.fetch_size 指定JDBC 的查詢尺度。通過調用(Statement.setFetchSize())。(2)hibernate.jdbc.batch_size 指定Hibernate 如何使用JDBC2批量更新。取值,推薦5到30。(3)hibernate.jdbc.batch_versioned_data 設置這個屬性為true,JDBC 將返回executeBatch 執行后正確的行數。打開這個參數,通常是安全的。Hibernate 將自動的譯碼這些數據使用批量DML。默認為false。取值true|false。(4)hibernate.jdbc.factory_class 選擇一個定制的org.hibernate.jdbc.Batcher。所有的應用程序不需要配置這個屬性。取值,定義工廠的類名。(5)hibernate.jdbc.use_scrollable_resultset Hibernate 使用JDBC2的可滾動記錄集。當使用用戶提供的JDBC 連接時,需要設置這個參數。否則,Hibernate 使用連接MetaData。取值true|false。(6)hibernate.jdbc.use_streams_for_binary 當讀或寫二進制數據或序列化數據從JDBC 或到JDBC,使用流。系統級的數據。設置true|false。( 7 ) hibernate.jdbc.use_get_generated_keys 在插入后,可以使用JDBC3的PreparedStatement.getGeneratedKeys()中的值找回本地產生的鍵值。要求JDBC3+和JRE1.4+,如果使用Hibernate identifier generator 后你的驅動程序有問題,請設置為false。默認情況下,設法連接MetaData 來決定。取值,true|false。(8)hibernate.connection.provider_class 實現了:org.hibernate.connection.ConnectionProvider 接口的類的名稱,為Hibernate 提供連接。( 9 ) hibernate.connection.isolation 設置JDBC 事務隔離的級別。檢查java.sql.Connection 的定義的常量值,但要注意大多數數據庫不支持所有的隔離級別、一些附加的和非標準的隔離級別。取值,1、2、4、8。(10)hibernate.connection.autocommit JDBC 共享連接的自動提交。(不推薦)取值,true|false。(11)hibernate.connection.release_mode 指定什么時候,Hibernate 應該釋放JDBC 連接。默認情況下,JDBC 是一直存在,只到Session 是被明確關閉或斷開連接時。對于應用的服務器JTA 數據源,你應該使用after_statement 強制釋放JDBC連接在每個JDBC 請求結束后。對于非JTA 數據源,通常是在每個事務結束后釋放JDBC 連接是有意義的。將該值設為auto 時,JTA 和CMT 事務策略時,是選擇after_statement 方式。JDBC 事務策略時,是選擇after_transaction。取值,auto(default),on_close,after_statment,after_transaction。注意:這個設置只影響通過 SessionFactory.openSession 打開的session。對于通過SessionFactory.getCurrentSession 獲取的session,CurrentSessionContext 實現類的配置是用來控制這些session 的連接釋放模式。(12)hibernate.connection. 傳遞這些屬性到DriverManager.getConnection 中。(13)hibernate.jndi. 傳遞這些屬性到JNDI InitialContextFactory。

4.3、Hibernate Cache 屬性

(1)hibernate.cache.provider_class 定制的CacheProvider 的類名。(2)hibernate.cache.use_minimal_puts 花費更多的讀操作,來優化二級緩存的最少寫操作。這個操作對于集群緩存是非常有用的。在Hibernate3中,對于集群緩存是默認開啟該功能的。取值,true|false。(3)hibernate.cache.use_query_cache 開啟查詢緩存,個別查詢肯定應該開啟查詢緩存。取值,true|false。(4)hibernate.cache.use_second_level_cache 也許過去習慣于完全屏蔽掉二級緩存,默認是開啟,對于指定CacheProvider 實現類的情況。取值,true|false。(5)hibernate.cache.query_cache_factory 實現QueryCache 接口的類名,默認是內置的StandardQueryCache

(6)hibernate.cache.region_prefix 對于使用二級緩存區域名的前綴。(7)hibernate.cache.use_structured_entries 強迫Hibernate 在存儲數據到二級緩存時,使用更人性化的格式。取值,true|false。

4.4、Hibernate 事務屬性

( 1 ) hibernate.transaction.transaction_class 使用Hibernate 事務APIs 的TransactionFactory 的類名。默認是JDBCTransactionFactory。

(2)jta.UserTransaction JTATransactionFactory 使用JNDI 名字從應用服務器中獲取JTA UserTransaction。取值,jndi/ut。

(3)hibernate.transaction.manager_lookup_class是一個TransactionManagerLookup 實現類的類名。當JVM 級別的緩存開啟時或在JTA 環境中使用hilo generator 時,要求指定該值。

(4)hibernate.transaction.flush_before_completion 如果設為true,session 將在事務完成階段之前,自動將緩存區的值推入到數據庫中。內置和自動session 上下文管理是被優先選用的。取值,true|false。

(5)hibernate.transaction.auto_close_session 如果設為true,session 將在事務完成之后,自動的關閉session。內置和自動session 上下文管理是被優先選用的。取

值,true|false。

4.5、Miscellaneous properties 各種混合的屬性

(1)hibernate.current_session_context_class 提供一個對于當前session 生命周期的策略。取值,jta、thread、managed、定制類名。

( 2 ) hibernate.query.factory_class 選擇HSQL 的解析實現類。取值,org.hibernate.hsql.ast.ASTQueryTranslatorFactory 和

org.hibernate.hsql.classic.ClassicQueryTranslatorFactory。

(3)hibernate.query.subsitutions Hibernate 中標記符到SQL 中標記符的映射。舉例說,可以是函數名或普通字符串名。取值,如hsqLiteral=SQL_LITERAL,

hqlFunction=SQLFUN。

(4)hibernate.hbm2ddl.auto 當SessionFactory 被創建時,自動的驗證或輸出模式DDL(也就建表語句)到數據庫中。也就是說,自動的驗證數據庫表結構或先刪

除再重新建立,或在原表結構上更新數據表結構。當將值置為create-drop 時,在SessionFactory 被清除時,將刪除數據庫中表結構。取值,validate、create、update、

create-drop。

(5)hibernate.cglib.use_reflection_optimizer 用CGLIB 代替運行期的reflection(系統級屬性)。在有故障時,反射是非常有用的,注意Hibernate 總是需要CGLIB,

甚至在你關閉優化后。你不可以設置這個屬性在hibernate.cfg.xml 文件中。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛冈县| 白水县| 宾阳县| 工布江达县| 紫阳县| 芮城县| 漾濞| 芜湖县| 洪江市| 溧阳市| 温州市| 密云县| 凤山市| 许昌市| 扎鲁特旗| 白银市| 乡城县| 北宁市| 吉安市| 石首市| 天柱县| 响水县| 德安县| 临湘市| 甘孜县| 岢岚县| 永修县| 莫力| 青川县| 清徐县| 河南省| 鞍山市| 科技| 霍邱县| 阿坝县| 开江县| 荆州市| 浙江省| 杭锦后旗| 淮南市| 吐鲁番市|