程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Hibernate學習0.Hibernate入門,photoshop7.0入門學習

Hibernate學習0.Hibernate入門,photoshop7.0入門學習

編輯:JAVA綜合教程

Hibernate學習0.Hibernate入門,photoshop7.0入門學習


Hibernate是什麼

面向java環境的對象/關系數據庫映射工具。

1.開源的持久層框架.

2.ORM(Object/Relational Mapping)映射工具,建立面向對象的域模型和關系數據模型之間的映射.

3.連接java應用和數據庫的中間件.

4.對JDBC進行封裝,負責java對象的持久化.

5.在分層結構中處於持久化層,封裝對數據庫的訪問細節,使業務邏輯層更專注於實現業務邏輯

Hibernate作用

Hibernate是Java應用和關系數據庫之間的橋梁,它負責Java對象和關系數據之間的映射。 Hibernate內部封裝了通過JDBC訪問數據庫的操作,向上層應用提供了面向對象的數據訪問API。

ORM簡介

對象-關系映射(ORM,即Object-Relation Mapping).

指單個組件中負責所有實體域對象的持久化,封裝數據訪問細節。

對象-關系映射的概念

面向對象概念

面向關系概念

對象

表的行(記錄)

屬性

表的列(字段)

ORM中間件的使用方法

   采用元數據來描述對象-關系映射細節,元數據通常采用xml格式,並存放在專門的對象-關系映射文件中。只要配置了持久化類與表的映射關系,orm中間件在運行時就能夠參照映射文件的信息,把域對象持久化到數據庫中。

public void deleteCustomer(Customer c){
      Session session = getSession();
      session.delete(c);
}

執行步驟如下:

1.運用反射機制,獲得Customer對象的Customer.class類。

2.參照映射文件得到Customer類對應的表的信息,以及和Customer類關聯的類以及相應的表信息。

3.根據以上信息生成SQL語句。

4.調用JDBC  API,執行該語句。

Hibernate軟件包

要使用Hibernate,需要得到Hibernate的jar包和相應的一些第三方包。在使用Hibernate時,需要用到的是Hibernate.jar和lib目錄下的一些第三方jar包。
  • hibernate3.jar: 包含Hibernate3的基礎框架和核心API類庫,是必須使用的jar包。
  • cglib-2.1.2.jar: CGLIB庫,Hibernate用它來實現PO字節碼的動態生成,它是非常核心的庫,是必須使用的jar包。
  • dom4j-1.6.1.jar: dom4j是一個Java的XML API,類似於jdom,用來讀寫XML文件。
  • commons-collections.jar: Apache Commons包中的一個,包含了一些Apache開發的集合類,功能比java.util.*強大。必須使用的jar包。
  • commons-logging.jar: Apache Commons包中的一個,包含了日至功能,必須使用的jar包。
  • ant-1.6.5.jar: Ant編譯工具的jar包,用來編譯Hibernate源代碼的。它是可選包。
  • c3po-0.9.0.jar: C3PO是一個數據庫連接池,Hibernate可以配置為使用C3PO的連接池,如果准備用這個連接池,就需要這個jar包。
  • connector.jar: JCA(Java Cryptography Architecture,Java加密架構,java平台中用於訪問和開發加密功能的框架)規范,如果在App Server上把Hibernate配置為Connector,就需要這個jar。一般App Server都會帶上這個包。
  • jaas.jar: JAAS是用來進行權限驗證的,已經包含在JDK1.4裡面了。所以它的實際上是多余的包。
  • jdbc2_0-stdext.jar: JDBC2.0的擴展包,一般來說數據庫連接池會用上它,不過App Server都會帶上它,所以也是多余的。
  • jta.jar: JTA(java事務處理的機制)規范,當Hibernate使用JTA的時候需要,不過App Server都會帶上它,所以也是多余的。
  • junit-3.8.1.jar: Junit包,當運行Hibernate自帶的測試代碼的時候需要,否則就不用。
  • xerces-2.6.2.jar和xml-apis.jar:Xerces是XML解析器,xml-apis實際上是JAXP。也是多余的包。

Hibernate API簡介

1.提供訪問數據庫操作(session,transaction,query)

2.配置hibernate接口(configuratioin)

3.回調接口(Interceptor,Lifecycle,Validatable)

4.用於擴展的功能接口(UserType,CompositeUserType, IdentifierGenerator)

Hibernate對JDBC做了輕量級的封裝。所謂輕量級是指Hibernate並沒有完全封裝JDBC,java應用既可以通過HibernateAPI來訪問數據庫,還可直接通過JDBC API訪問數據庫。

Hibernate核心接口

1.Configuration

配置hibernate,根啟動hibernate,創建sessionFactory對象。

2 .sessionFactory

負責創建Session對象,可以通過Configuration對象創建SessionFactory對象。

SessionFactory 對象中保存了當前的數據庫配置信息和所有映射關 系以及       預定義的SQL語句。同時,SessionFactory還負責維護Hibernate的二級緩存。    

SessionFactory對象的創建會有較大的開銷,而且SessionFactory對象采取了線程安全的設計方式,因此在實際中SessionFactory對象可以盡量的共享,在大多數情況下,一個應用中針對一個數據庫可以共享一個SessionFactory實例

Configuration config = new Configuration().configure();

SessionFactory factory = config.buildSessionFactory();

3.Session

使用最廣泛,也被稱為持久化管理器,它提供和持久化相關的操作。增、刪、改、查等。不是線程安全的,因此,一個Session對象只可以由一個線程使用。避免多個線程共享。輕量級的,創建和銷毀不需要消耗太多資源。Session中有一個緩存,稱為一級緩存。存放當前工作單元加載的對象。

Configuration config = new Configuration().configure();

SessionFactory factory = config.buildSessionFactory();

Session session = factory.openSession();

4.Transaction hibernate數據庫事務接口

將應用代碼從底層的事務實現中抽象出來——這可能是一個JDBC事務,一個JTA用戶事務或者甚至是一個公共對象請求代理結構(CORBA)——允許應用通過一組一致的API控制事務邊界。

使用Hibernate進行操作時(增、刪、改)必須顯示的調用Transaction(默認:autoCommit=false)

Transaction tx = session.beginTransaction();

5.Query和Criteria接口

都是查詢接口,query實例包裝了HQL查詢語句,hql是面向對象的,他引用類名及類的屬性名,而不是表名和字段名。Criteria接口完全封裝了基於字符串形式的查詢語句,比query接口更面向對象,他擅長執行動態查詢。sessoin接口的find方法也具有數據查詢功能,但他只是執行一些簡單的hql查詢語句的快捷方式,遠沒有query接口功能強大。

回調接口

1.Lifecycle和Validatable接口:lifecycle接口能使持久化類響應被加載、保存和刪除事件。Validatable接口使持久化類的接口被保存之前進行數據驗證。這種方式強迫持久化類實現特定接口,使hibernate API滲透到持久化類中,會影響可移植性,不值得推薦。

2.Interceptor:不必由持久化類來實現。可定義專門實現該接口的類,負責響應持久化類的實例被加載、保存、更新或刪除的事件。

Hibernate映射類型接口

1.PrivateType類:映射java基本數據類型,包括ByteType、ShortType、IntegerType、LongType、FloatType、DoubleType、CharactorType、BooleanType。

2.DateType:映射java日期類型。

3.BinaryType:映射Byte[]類型。

Query.setParameter(“name”,”name”,Hibernate.STRING)

可供擴展的接口

hibernate提供的多數功能是可配置的,允許用戶選擇適當的內置策略。如可配置如下數據庫方言:

hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect

hibernate.dialect=net.sf.hibernate.dialect.OracleDialect

hibernate.dialect=net.sf.hibernate.dialect.SybaseDialect

如果hibernate內置的策略不能滿足需求時,允許用戶自定義實現接口或擴展特定的類。Hibernate的擴展點包括:

主鍵生成策略:IdentifierGenerator 

sql方言:Dialect抽象類

緩存機制:cache和cacheprovider接口

jdbc連接管理器:connectionprovider等

Hibernate運行過程

Hibernate的運行過程如下:

1、應用程序先調用Configuration類,該類讀取Hibernate配置文件及映射文件中的信息,

2、並用這些信息生成一個SessionFactory對象,

3、然後從SessionFactory對象生成一個Session對象,

4、並用Session對象生成Transaction對象;

    A、可通過Session對象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法對PO進行加載、保存、更新、刪除、等操作;

    B、在查詢的情況下,可通過Session對象生成一個Query對象,然後利用Query對象執行查詢操作;如果沒有異常,Transaction對象將提交這些操作到數據庫中。

小結

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved