午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Hibernate 的原理與配置

Hibernate 的原理與配置

熱門標簽:漯河辦理400電話 地圖標注人員兼職 怎樣把地圖標注出來 黃石智能營銷電銷機器人效果 騰訊地圖標注商戶改名注冊入駐 商丘百應電話機器人有沒有效果 開封便宜外呼系統(tǒng)報價 淮南騰訊地圖標注 電話機器人的特色和創(chuàng)新

  也許你聽說過Hibernate的大名,但可能一直不了解它,也許你一直渴望使用它進行開發(fā),那么本文正是你所需要的!在本文中,我向大家重點介紹Hibernate的核心API調用庫,并講解一下它的基本配置。

  看完本文后,我相信你對什么是ORM(對像/關系映射)以及它的優(yōu)點會有一個深刻的認識,我們先通過一個簡單的例子開始來展現(xiàn)它的威力。

  正如一些傳統(tǒng)的經(jīng)典計算機文章大都會通過一個“hello,world”的例子開始講解一樣,我們也不例外,我們也將從一個相對簡單的例子來闡述Hibernate的開發(fā)方法,但如果要真正闡述Hibernate的一些重要思想,僅僅靠在屏幕上打印一些字符是遠遠不夠的,在我們的示例程序中,我們將創(chuàng)建一些對象,并將其保存在數(shù)據(jù)庫中,然后對它們進行更新和查詢。

  閱讀導航

  “Hello World”“Hello world”示例程序讓您對Hibernate有一個簡單的認識。
  理解Hibernate的架構介紹Hibernate接口的主要功能。
  核心接口Hibernate有5個核心接口,通過這幾個接口開發(fā)人員可以存儲和獲得持久對象,并且能夠進行事務控制
  一個重要的術語:TypeType是Hibernate發(fā)明者發(fā)明的一個術語,它在整個構架中是一個非常基礎、有著強大功能的元素,一個Type對象能將一個Java類型映射到數(shù)據(jù)庫中一個表的字段中去。
  策略接口Hibernate與某些其它開源軟件不同的還有一點――高度的可擴展性,這通過它的內置策略機制來實現(xiàn)。
  基礎配置Hibernate可以配置成可在任何Java環(huán)境中運行,一般說來,它通常被用在2-3層的C/S模式的項目中,并被部署在服務端。
  創(chuàng)建一個SessionFactory對象要創(chuàng)建一個SessionFactory對象,必須在Hibernate初始化時創(chuàng)建一個Configuration類的實例,并將已寫好的映射文件交由它處理。

  “Hello World”

  Hibernate應用程序定義了一些持久類,并且定義了這些類與數(shù)據(jù)庫表格的映射關系。在我們這個“Hello world”示例程序中包含了一個類和一個映射文件。讓我們看看這個簡單的持久類包含有一些什么?映射文件是怎樣定義的?另外,我們該怎樣用Hibernate來操作這個持久類。

  我們這個簡單示例程序的目的是將一些持久類存儲在數(shù)據(jù)庫中,然后從數(shù)據(jù)庫取出來,并將其信息正文顯示給用戶。其中Message正是一個簡單的持久類:,它包含我們要顯示的信息,其源代碼如下:

  列表1 Message.Java 一個簡單的持久類

  package hello;
  public class Message {
  private Long id;
  private String text;
  private Message nextMessage;
  private Message() {}
  public Message(String text) {
  this.text = text;
  }
  public Long getId() {
  return id;
  }
  private void setId(Long id) {
  this.id = id;
  }
  public String getText() {
  return text;
  }
  public void setText(String text) {
  this.text = text;
  }
  public Message getNextMessage() {
  return nextMessage;
  }
  public void setNextMessage(Message nextMessage) {
  this.nextMessage = nextMessage;
  }
  }

  Message類有三個屬性:Message的id 、消息正文、以及一個指向下一條消息的指針。其中id屬性讓我們的應用程序能夠唯一的識別這條消息,通常它等同于數(shù)據(jù)庫中的主鍵,如果多個Message類的實例對象擁有相同的id,那它們代表數(shù)據(jù)庫某個表的同一個記錄。在這里我們選擇了長整型作為我們的id值,但這不是必需的。Hibernate允許我們使用任意的類型來作為對象的id值,在后面我們會對此作詳細描述。

  你可能注意到Message類的代碼類似于JavaBean的代碼風格,并且它有一個沒有參數(shù)的構造函數(shù),在我們以后的代碼中我將繼續(xù)使用這種風格來編寫持久類的代碼。

  Hibernate會自動管理Message類的實例,并通過內部機制使其持久化,但實際上Message對象并沒有實現(xiàn)任何關于Hibernate的類或接口,因此我們也可以將它作為一個普通的Java類來使用:

  Message message = new Message("Hello World");
  System.out.println( message.getText() );

  以上這段代碼正是我們所期望的結果:它打印“hello world”到屏幕上。但這并不是我們的最終目標;實際上Hibernate與諸如EJB容器這樣的環(huán)境在持久層實現(xiàn)的方式上有很大的不同。我們的持久類(Message類)可以用在與容器無關的環(huán)境中,不像EJB必須要有EJB容器才能執(zhí)行。為了能更清楚地表現(xiàn)這點,以下代碼將我們的一個新消息保存到數(shù)據(jù)庫中去:

  Session session = getSessionFactory().openSession();
  Transaction tx = session.beginTransaction();
  Message message = new Message("Hello World");
  session.save(message);
  tx.commit();
  session.close();

  以上這段代碼調用了Hibernate的Session和Transaction接口(關于getSessionFactory()方法我們將會馬上提到)。它相當于我們執(zhí)行了以下SQL語句:

  insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
  values (1, 'Hello World', null)

  在以上的SQL語句中,MESSAGE_ID字段到底被初始化成了什么值呢?由于我們并沒有在先前的代碼中為message對象的id屬性賦與初始值,那它是否為null呢?實際上Hibernate對id屬性作了特殊處理:由于它是一個對象的唯一標識,因此當我們進行save()調用時,Hibernate會為它自動賦予一個唯一的值(我們將在后面內容中講述它是如何生成這個值的)。

  我們假設你已經(jīng)在數(shù)據(jù)庫中創(chuàng)建了一個名為MESSAGE的表,那么既然前面這段代碼讓我們將Message對象存入了數(shù)據(jù)庫中,那么現(xiàn)在我們就要將它們一一取出來。下面這段代碼將按照字母順序,將數(shù)據(jù)庫中的所有Message對象取出來,并將它們的消息正文打印到屏幕上:

  Session newSession = getSessionFactory().openSession();
  Transaction newTransaction = newSession.beginTransaction();
  List messages =newSession.find("from Message as m order by m.text asc");
  System.out.println( messages.size() + " message(s) found:" );
  for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
  Message message = (Message) iter.next();
  System.out.println( message.getText() );
  }
  newTransaction.commit();
  newSession.close();

  在以上這段代碼中,你可能被find()方法的這個參數(shù)困擾著:"from Message as m order by m.text asc",其實它是Hibernate自己定義的查詢語言,全稱叫Hibernate Query Language(HQL)。通俗地講HQL與SQL的關系差不多就是方言與普通話之間的關系,咋一看,你會覺得它有點類似于SQL語句。其實在find()調用時,Hibernate會將這段HQL語言翻譯成如下的SQL語句:

  select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
  from MESSAGES m
  order by m.MESSAGE_TEXT asc

  以下就是運行結果:

  1 message(s) found:
  Hello World

  如果你以前沒有ORM(對象-關系映射)的開發(fā)經(jīng)驗,那你可能想在代碼的某個地方去尋找這段SQL語句,但在Hibernate中你可能會失望:它根本不存在!所有就SQL語句都是Hibernate動態(tài)生成的。

  也許你會覺得還缺點什么,對!僅憑以上代碼Hibernate是無法將我們的Message類持久化的。我們還需要一些更多的信息,這就是映射定義表!這個表在Hibernate中是以XML格式來體現(xiàn)的,它定義了Message類的屬性是怎樣與數(shù)據(jù)庫中的MESSAGES表的字段進行一一對應的,列表2是這個示例程序的映射配置文件清單:

  列表2:示例程序的對象-關系映射表

  <?xml version="1.0"?>
  <!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  <hibernate-mapping>
  <class name="hello.Message" table="MESSAGES">
  <id name="id" column="MESSAGE_ID">
  <generator class="increment"/>
  </id>
  <property name="text" column="MESSAGE_TEXT"/>
  <many-to-one name="nextMessage" cascade="all" column="NEXT_MESSAGE_ID"/>
  </class>
  </hibernate-mapping>

  以上這個文檔告訴Hibernate怎樣將Message類映射到MESSAGES表中,其中Message類的id屬性與表的MESSAGE_ID字段對應,text屬性與表的MESSAGE_TEXT字段對應,nextMessage屬性是一個多對一的關系,它與表中的NEXT_MESSAGE_ID相對應。

  相對于有些開源項目來說,Hibernate的配置文件其實是很容易理解的。你可以輕松地修改與維護它。只要你定義好了持久類與數(shù)據(jù)庫中表字段的對應關系就行了,Hibernate會自動幫你生成SQL語句來對Message對象進行插入、更新、刪除、查找工作,你可以不寫一句SQL語句,甚至不需要懂得SQL語言!

  現(xiàn)在讓我們做一個新的試驗,我們先取出第一個Message對象,然后修改它的消息正文,最后我們再生成一個新的Message對象,并將它作為第一個Message對象的下一條消息,其代碼如下:

  列表3 更新一條消息

  Session session = getSessionFactory().openSession();
  Transaction tx = session.beginTransaction();
  // 1 is the generated id of the first message
  Message message =(Message) session.load( Message.class, new Long(1) );
  message.setText("Greetings Earthling");
  Message nextMessage = new Message("Take me to your leader (please)");
  message.setNextMessage( nextMessage );
  tx.commit();
  session.close();

  以上這段代碼在調用時,Hibernate內部自動生成如下的SQL語句:

  select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
  from MESSAGES m
  where m.MESSAGE_ID = 1

  insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
  values (2, 'Take me to your leader (please)', null)

  update MESSAGES
  set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2
  where MESSAGE_ID = 1

  當?shù)谝粋€Message對象的text屬性和nextMessage被程序修改時,請注意Hibernate是如何檢測到這種變化,并如何在數(shù)據(jù)庫中自動對它更新的。這實際上是Hibernate的一個很有價值的特色,我們把它稱為“自動臟數(shù)據(jù)檢測”,Hibernate的這個特色使得當我們修改一個持久對象的屬性后,不必顯式地通知Hibernate去將它在數(shù)據(jù)庫中進行更新。同樣的,當?shù)谝粋€Message對象調用setNextMessage()方法將第二個Message對象作為它的下一條消息的引用時,第二條消息會無需調用save()方法,便可以自動地保存在數(shù)據(jù)庫中。這種特色被稱為“級聯(lián)保存”,它也免去了我們顯式地對第二個Message對象調用save()方法之苦。

  如果我們再運行先前的那段將數(shù)據(jù)庫中所有的Message對象都打印出來的代碼,那它的運行結果如下:

  2 message(s) found:
  Greetings Earthling
  Take me to your leader (please)


  “Hello world”示例程序現(xiàn)在介紹完畢。我們總算對Hibernate有了一個簡單的認識,下面我們將回過頭來,對Hibernate的主要API調用作一下簡要的介紹:
  

  理解Hibernate的架構

  當你想用Hibernate開發(fā)自己的基于持久層的應用時,第一件事情應當是熟悉它的編程接口。Hibernate的API接口設計得盡量簡潔明了,以方便開發(fā)人員。然而實際上由于ORM的復雜性,它的API一般都不可能設計得很簡單。但是別擔心,你沒有必要一下子了解所有的Hibernate的API接口。

  我們將應用層放在了持久層的上部,實際上在傳統(tǒng)的項目中,應用層充當著持久層的一個客戶端角色。但對于一些簡單的項目來說,應用層和持久層并沒有區(qū)分得那么清楚,這也沒什么,在這種情況下你可以將應用層和持久層合并成了一層。

  Hibernate的接口大致可以分為以下幾種類型:

  · 一些被用戶的應用程序調用的,用來完成基本的創(chuàng)建、讀取、更新、刪除操作以及查詢操作的接口。這些接口是Hibernate實現(xiàn)用戶程序的商業(yè)邏輯的主要接口,它們包括Session、Transaction和Query。

  · Hibernate用來讀取諸如映射表這類配置文件的接口,典型的代表有Configuration類。

  · 回調(Callback)接口。它允許應用程序能對一些事件的發(fā)生作出相應的操作,例如Interceptor、Lifecycle和Validatable都是這一類接口。

  · 一些可以用來擴展Hibernate的映射機制的接口,例如UserType、CompositeUserType和IdentifierGenerator。這些接口可由用戶程序來實現(xiàn)(如果有必要)。

  Hibernate使用了J2EE架構中的如下技術:JDBC、JTA、JNDI。其中JDBC是一個支持關系數(shù)據(jù)庫操作的一個基礎層;它與JNDI和JTA一起結合,使得Hibernate可以方便地集成到J2EE應用服務器中去。

  在這里,我們不會詳細地去討論Hibernate API接口中的所有方法,我們只簡要講一下每個主要接口的功能,如果你想了解得更多的話,你可以在Hibernate的源碼包中的net.sf.hibernate子包中去查看這些接口的源代碼。下面我們依次講一下所有的主要接口:

  核心接口

  以下5個核心接口幾乎在任何實際開發(fā)中都會用到。通過這些接口,你不僅可以存儲和獲得持久對象,并且能夠進行事務控制。

  Session接口

  Session接口對于Hibernate 開發(fā)人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創(chuàng)建和銷毀它都不會占用很多資源。這在實際項目中確實很重要,因為在客戶程序中,可能會不斷地創(chuàng)建以及銷毀Session對象,如果Session的開銷太大,會給系統(tǒng)帶來不良影響。但值得注意的是Session對象是非線程安全的,因此在你的設計中,最好是一個線程只創(chuàng)建一個Session對象。

  在Hibernate的設計者的頭腦中,他們將session看作介于數(shù)據(jù)連接與事務管理一種中間接口。我們可以將session想象成一個持久對象的緩沖區(qū),Hibernate能檢測到這些持久對象的改變,并及時刷新數(shù)據(jù)庫。我們有時也稱Session是一個持久層管理器,因為它包含這一些持久層相關的操作,諸如存儲持久對象至數(shù)據(jù)庫,以及從數(shù)據(jù)庫從獲得它們。請注意,Hibernate 的session不同于JSP應用中的HttpSession。當我們使用session這個術語時,我們指的是Hibernate中的session,而我們以后會將HttpSesion對象稱為用戶session。

  SessionFactory 接口

  這里用到了一個設計模式――工廠模式,用戶程序從工廠類SessionFactory中取得Session的實例。

  令你感到奇怪的是SessionFactory并不是輕量級的!實際上它的設計者的意圖是讓它能在整個應用中共享。典型地來說,一個項目通常只需要一個SessionFactory就夠了,但是當你的項目要操作多個數(shù)據(jù)庫時,那你必須為每個數(shù)據(jù)庫指定一個SessionFactory。
  SessionFactory在Hibernate中實際起到了一個緩沖區(qū)的作用,它緩沖了Hibernate自動生成的SQL語句和一些其它的映射數(shù)據(jù),還緩沖了一些將來有可能重復利用的數(shù)據(jù)。

  Configuration 接口

  Configuration接口的作用是對Hibernate進行配置,以及對它進行啟動。在Hibernate的啟動過程中,Configuration類的實例首先定位映射文檔的位置,讀取這些配置,然后創(chuàng)建一個SessionFactory對象。

  雖然Configuration接口在整個Hibernate項目中只扮演著一個很小的角色,但它是啟動hibernate時你所遇到的每一個對象。

  Transaction 接口

  Transaction接口是一個可選的API,你可以選擇不使用這個接口,取而代之的是Hibernate的設計者自己寫的底層事務處理代碼。 Transaction接口是對實際事務實現(xiàn)的一個抽象,這些實現(xiàn)包括JDBC的事務、JTA中的UserTransaction、甚至可以是CORBA事務。之所以這樣設計是能讓開發(fā)者能夠使用一個統(tǒng)一事務的操作界面,使得自己的項目可以在不同的環(huán)境和容器之間方便地移值。

  Query和Criteria接口

  Query接口讓你方便地對數(shù)據(jù)庫及持久對象進行查詢,它可以有兩種表達方式:HQL語言或本地數(shù)據(jù)庫的SQL語句。Query經(jīng)常被用來綁定查詢參數(shù)、限制查詢記錄數(shù)量,并最終執(zhí)行查詢操作。

  Criteria接口與Query接口非常類似,它允許你創(chuàng)建并執(zhí)行面向對象的標準化查詢。

  值得注意的是Query接口也是輕量級的,它不能在Session之外使用。

  Callback 接口

  當一些有用的事件發(fā)生時――例如持久對象的載入、存儲、刪除時,Callback接口會通知Hibernate去接收一個通知消息。一般而言,Callback接口在用戶程序中并不是必須的,但你要在你的項目中創(chuàng)建審計日志時,你可能會用到它。

   一個重要的術語:Type

  Hibernate的設計者們發(fā)明了一個術語:Type,它在整個構架中是一個非常基礎、有著強大功能的元素。一個Type對象能將一個Java類型映射到數(shù)據(jù)庫中一個表的字段中去(實際上,它可以映射到表的多個字段中去)。持久類的所有屬性都對應一個type。這種設計思想使用Hibernate有著高度的靈活性和擴展性。

  Hibernate內置很多type類型,幾乎包括所有的Java基本類型,例如Java.util.Currency、Java.util.calendar、byte[]和Java.io.Serializable。

  不僅如此,Hibernate還支持用戶自定義的type,通過實現(xiàn)接口UserType和接口CompositeUserType,你可以加入自己的type。你可以利用這種特色讓你的項目中使用自定義的諸如Address、Name這樣的type,這樣你就可以獲得更大的便利,讓你的代碼更優(yōu)雅。自定義type在Hibernate中是一項核心特色,它的設計者鼓勵你多多使用它來創(chuàng)建一個靈活、優(yōu)雅的項目!

  策略接口

  Hibernate與某些其它開源軟件不同的還有一點――高度的可擴展性,這通過它的內置策略機制來實現(xiàn)。當你感覺到Hibernate的某些功能不足,或者有某些缺陷時,你可以開發(fā)一個自己的策略來替換它,而你所要做的僅僅只是繼承它的某個策略接口,然后實現(xiàn)你的新策略就可以了,以下是它的策略接口:

  · 主鍵的生成 (IdentifierGenerator 接口)

  · 本地SQL語言支持 (Dialect 抽象類)

  · 緩沖機制 (Cache 和CacheProvider 接口)

  · JDBC 連接管理 (ConnectionProvider接口)

  · 事務管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)

  · ORM 策略 (ClassPersister 接口)

  · 屬性訪問策略 (PropertyAccessor 接口)

  · 代理對象的創(chuàng)建 (ProxyFactory接口)

  Hibernate為以上所列的機制分別創(chuàng)建了一個缺省的實現(xiàn),因此如果你只是要增強它的某個策略的功能的話,只需簡單地繼承這個類就可以了,沒有必要從頭開始寫代碼。

  以上就是Hibernate的一些核心接口,但當我們真正開始用它進行開發(fā)時,你的腦海里可能總會有一個疑問:我是通過什么方式,并從哪里取得Session的呢?以下我們就解答這個問題。

  基礎配置

  現(xiàn)在回顧一下我們先前的內容:我們寫出了一個示例程序,并簡要地講解了Hibernate的一些核心類。但要真正使你的項目運行起來,還有一件事必須要做:配置。Hibernate可以配置成可在任何Java環(huán)境中運行,一般說來,它通常被用在2-3層的C/S模式的項目中,并被部署在服務端。在這種項目中,Web瀏覽器、或Java GUI程序充當者客戶端。盡管我們的焦點主要是集中在多層web應用,但實際上在一些基于命令行的應用中也可以使用Hibernate。并且,對Hibernate的配置在不同的環(huán)境下都會不同,Hibernate運行在兩種環(huán)境下:可管理環(huán)境和不可管理環(huán)境

  · 可管理環(huán)境――這種環(huán)境可管理如下資源:池資源管理,諸如數(shù)據(jù)庫連接池和,還有事務管理、安全定義。一些典型的J2EE服務器(JBoss、Weblogic、WebSphere)已經(jīng)實現(xiàn)了這些。

  · 不可管理環(huán)境――只是提供了一些基本的功能,諸如像Jetty或Tomcat這樣的servlet容器環(huán)境。一個普通的Java桌面應用或命令行程序也可以認為是處于這種環(huán)境下。這種環(huán)境不能提供自動事務處理、資源管理或安全管理,這些都必須由應用程序自己來定義。

  Hibernate的設計者們將這兩種環(huán)境設計了一個統(tǒng)一的抽象界面,因此對于開發(fā)者來說只有一種環(huán)境:可管理環(huán)境。如果實際項目是建立在諸如Tomcat這類不可管理的環(huán)境中時,那Hibernate將會使用它自己的事務處理代碼和JDBC連接池,使其變?yōu)橐粋€可管理環(huán)境。
  對于可管理的環(huán)境而言,Hibernate會將自己集成在這種環(huán)境中。對于開發(fā)者而言,你所要做的工作非常簡單:只需從一個Configuration類中創(chuàng)建一個SessionFactory類就可以了。
   創(chuàng)建一個SessionFactory對象

  為了能創(chuàng)建一個SessionFactory對象,你必須在Hibernate初始化時創(chuàng)建一個Configuration類的實例,并將已寫好的映射文件交由它處理。這樣,Configuration對象就可以創(chuàng)建一個SessionFactory對象,當SessionFactory對象創(chuàng)建成功后,Configuration對象就沒有用了,你可以簡單地拋棄它。如下是示例代碼:

  Configuration cfg = new Configuration();
  cfg.addResource("hello/Message.hbm.xml");
  cfg.setProperties( System.getProperties() );
  SessionFactory sessions = cfg.buildSessionFactory();

  在以上代碼中,Message.hb.xml這個映射文件的位置比較特殊,它與當前的classpath相關。例如classpath包含當前目錄,那在上述代碼中的Message.hbm.xml映射文件就可以保存在當前目錄下的hello目錄中。

  作為一種約定,Hibernate的映射文件默認以.htm.xml作為其擴展名。另一個約定是堅持為每一個持久類寫一個配置文件,想一想如果你將所有持久類的映射寫入一個單獨的配置文件中的話,那這個配置文件肯定非常龐大,不易維護。但這里又出現(xiàn)了一個新問題:如果為每個類寫一個配置文件的話,這么多的配置文件應該存放在哪里呢?

  Hibernate推薦你將每個映射文件保存在與持久類相同的目錄下,并且與持久類同名。例如我們第一個示例程序中的Message持久類放在hello目錄下,那你必須在這個目錄下存放名為Message.hbm.xml的映射文件。這樣一個持久類都有自己的一個映射文件,避免了出現(xiàn)像struts項目中的“struts-config.xml地獄”的情況。如果你不遵循這種規(guī)定,那你必須手動地用addResource()方法將一個個的映射文件載入;但你如果遵循這種規(guī)定,那你可以方便地用addClass()方法同時將持久類和它的映射文件載入,以下是體現(xiàn)這種便利性的示例代碼:

  SessionFactory sessions = new Configuration()
  .addClass(org.hibernate.auction.model.Item.class)
  .addClass(org.hibernate.auction.model.Category.class)
  .addClass(org.hibernate.auction.model.Bid.class)
  .setProperties( System.getProperties() )
  .buildSessionFactory();

  當然,Hibernate的映射文件還有很多其它的配置選項,比如數(shù)據(jù)庫連接的設定,或是能夠改變Hibernate運行時行為的一些設定。所有的設置可能是非常龐雜的,足以讓你喘不過氣來,但是不必擔心,因為Hibernate為絕大多數(shù)值都設定了一個合理缺省值,你只需要修改這些配置文件中的極小一部分值。

  你可以通過以下幾種方式來修改Hibernate的系統(tǒng)配置參數(shù):

  · 將一個Java.util.Properties實例作為參數(shù)傳給Configuration類的setProperties()方法。

  · 在Hibernate啟動時用Java –Dproperty=value的方式設置值。

  · 在classpath可以找到的路徑下創(chuàng)建一個名為hibernate.properties的配置文件。

  · 在classpath可以找到的路徑下創(chuàng)建一個名為hibernate.cfg.xml的文件,并在其<property>標簽中定義屬性值。

  以上就是對Hibernate的一個大致介紹,如果你想知道得更多,那本文還是遠遠不夠的,我將陸續(xù)推出更多關于Hibernate的資料。但有一點是毫無疑問的:它的確是一個非常優(yōu)秀的持久層解決方案!

您可能感興趣的文章:
  • Hibernate環(huán)境搭建與配置方法(Hello world配置文件版)
  • Eclipse添加xml文件提示及Hibernate配置學習
  • springmvc4+hibernate4分頁查詢功能實現(xiàn)
  • spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25開發(fā)環(huán)境搭建圖文教程
  • struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開發(fā)環(huán)境搭建圖文教程
  • SSH框架網(wǎng)上商城項目第1戰(zhàn)之整合Struts2、Hibernate4.3和Spring4.2
  • hibernate4基本配置方式詳解

標簽:亳州 鄭州 岳陽 紅河 拉薩 大興安嶺 馬鞍山 武威

巨人網(wǎng)絡通訊聲明:本文標題《Hibernate 的原理與配置》,本文關鍵詞  Hibernate,的,原理,與,配置,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Hibernate 的原理與配置》相關的同類信息!
  • 本頁收集關于Hibernate 的原理與配置的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲无玛一区| 粉嫩av性色av蜜臀av网站| 国内偷自视频区视频综合| 91在线一区二区| 长河落日免费高清观看| 欧美精品在线一区| 国产视频久久久| av资源网一区| 国产午夜精品无码| 两根大肉大捧一进一出好爽视频| 亚洲精品国产免费| 91日韩精品一区| 久久久久黄色片| 特级西西444| 久久国产天堂福利天堂| 中文av一区特黄| 在线观看亚洲一区二区| 狠狠爱免费视频| 国产成人精品一区二区在线| 色老汉一区二区三区| 三级网站免费观看| 中文字幕在线观看的网站| 女人一区二区三区| 中文字幕亚洲欧美日韩高清| 中文一区在线播放| aa视频在线免费观看| 国产福利短视频| 亚洲国产午夜伦理片大全在线观看网站 | 亚洲 国产 日韩 欧美| 99sesese| 六十路精品视频| 久久影院免费观看| 在线观看亚洲a| www.视频一区| 91久久久久久久久久久久| 国产免费a级片| 国产又黄又爽免费视频| 浅井舞香一区二区| 91麻豆精品91久久久久久清纯| 成人性视频免费网站| 亚洲永久精品视频| 自拍偷拍第9页| 国产高潮免费视频| 日韩国产在线一区| 亚洲欧美日韩精品一区| 亚洲午夜精品一区二区| 午夜精品在线视频| 亚洲欧美在线一区| 正在播放亚洲一区| 国产欧美日韩三级| 久久超碰97人人做人人爱| 一区二区小视频| 青娱乐免费在线视频| 免费黄色在线播放| 黄色免费网址大全| 国产性生活免费视频| 欧美韩国日本精品一区二区三区| 国产精品91一区| 久久久久久91| 社区色欧美激情 | 日韩免费在线观看| 色综合天天综合色综合av| 国产欧美一区二区三区网站| 精品一区二区免费在线观看| 日批视频在线播放| 不卡av中文字幕| 亚洲天堂手机版| 色婷婷在线观看视频| 久久久久久久九九九九| 日日骚一区二区三区| 五月激情四射婷婷| 欧美18—19性高清hd4k| 扒开jk护士狂揉免费| 97中文字幕在线观看| 天堂中文视频在线| 一路向西2在线观看| 日本老熟妇毛茸茸| 黄色一级片播放| 欧美网站免费观看| 亚洲午夜精品久久久久久人妖| 亚洲熟妇无码av在线播放| 丰满女人性猛交| 麻豆一区二区三区在线观看| 日本黑人久久| 男人的天堂成人| 久久国产精品网| 日本xxxxxxx免费视频| 男人插女人视频在线观看| 大荫蒂性生交片| 97成人在线观看视频| 午夜激情av在线| 男人女人拔萝卜视频| av黄色一级片| 精品久久久久久中文字幕人妻最新| www.日本高清| 成年人在线免费看片| 波多野结衣家庭教师| 国产无套丰满白嫩对白| 精品国产伦一区二区三区| 日本激情视频网站| 亚洲欧美国产高清va在线播放| 一级黄色片国产| 国产精品久久久久久婷婷天堂| 久久久久久久999精品视频| 欧美激情第1页| 国产精品96久久久久久| http;//www.99re视频| 蜜桃麻豆91| r级无码视频在线观看| 91av视频免费观看| 91成年人网站| 国产精品不卡av| 在线不卡免费视频| 日韩高清在线电影| 精品视频久久久久| 一级特黄aaa大片在线观看| 日本伊人午夜精品| 91视频免费看| 日韩欧美a级成人黄色| 日韩欧美亚洲国产另类| xx视频.9999.com| 国产日韩欧美中文| 浴室偷拍美女洗澡456在线| 国内自拍第二页| 男生草女生视频| 日韩国产成人在线| 激情综合五月婷婷| 欧美极品少妇xxxxⅹ高跟鞋| 动漫精品一区二区| 亚洲国产精品一区二区久| 欧美日韩成人免费| 97视频中文字幕| 在线观看亚洲视频啊啊啊啊| 国产一级久久久| 欧美亚洲一区二区在线| 五月婷婷之婷婷| 中文字幕一区二区在线播放| 欧美性色aⅴ视频一区日韩精品| 欧美日本在线播放| 欧美成人免费播放| 亚洲精品91在线| 国产免费一区二区三区免费视频| 亚洲欧美日韩国产另类专区| 国产网站欧美日韩免费精品在线观看| 国产日韩欧美中文在线播放| 欧美成人福利在线观看| 久久国产精品国语对白| 亚洲日本韩国在线| 欧美国产成人精品| 中文字幕一区二区精品| 精品国产自在精品国产浪潮 | 精品日韩一区二区三区| 国产精品jvid在线观看蜜臀| 女同性恋一区二区| 国产熟妇久久777777| 精品人妻伦一区二区三区久久| 9i在线看片成人免费| 欧美猛男超大videosgay| 88xx成人精品| 精品这里只有精品| 久久亚洲AV无码| 国产91在线观看丝袜| 777欧美精品| 亚洲一区二区三区成人在线视频精品| 精品www久久久久奶水| 日本一级黄色录像| 91丨porny丨蝌蚪视频| 欧美精品一区二区久久婷婷 | 在线免费观看视频一区| 欧美在线一级视频| 日本不卡在线观看视频| 中文字幕视频网站| 欧美激情在线免费观看| 色噜噜久久综合伊人一本| 亚洲精品成人久久久998| 欧美自拍偷拍网| 韩国av一区二区三区在线观看| 欧美日韩国产综合一区二区三区 | 久久久久久久一区二区| 中文字幕无码精品亚洲资源网久久| 国产亚洲精品久久久久久打不开| 国产ts人妖一区二区| 欧美亚洲另类在线一区二区三区| 性爱在线免费视频| 亚洲人午夜射精精品日韩| 国产精品69精品一区二区三区| 日本一区二区在线视频观看| 亚洲欧美视频在线播放| 男男视频亚洲欧美| 精品国产乱码久久久久久牛牛| 久久国产日韩欧美| 性欧美精品男男| 成人av电影免费在线播放| 最新亚洲国产精品| 国产乱子夫妻xx黑人xyx真爽| 97caocao| 欧美三级中文字| 日本亚洲导航| 日韩特级黄色片| 午夜成人免费视频| 91免费综合在线| 久久午夜福利电影| 国产日韩欧美综合在线| 欧美与黑人午夜性猛交久久久| 深夜福利网站在线观看| 紧缚捆绑精品一区二区| www.日韩av.com| 国产美女18xxxx免费视频| 激情综合色综合久久综合| 久久偷看各类女兵18女厕嘘嘘| 久久99999| 久久99国产精品免费网站| 中文字幕成人精品久久不卡| 在线观看亚洲色图| 懂色av一区二区在线播放| 午夜精品久久久久久久男人的天堂| 熟妇高潮一区二区| 久久婷婷综合激情| 国产剧情日韩欧美| 校园春色 亚洲| 一本大道av一区二区在线播放| 亚洲福利av在线| 丰满人妻妇伦又伦精品国产| 在线播放日韩欧美| 伊人久久一区二区三区| 国产精品久久久久一区二区三区共| 国产精品一区二区久久国产| 中文字幕求饶的少妇| 狠狠色香婷婷久久亚洲精品| 日韩中文在线字幕| 麻豆精品蜜桃视频网站| 韩日精品中文字幕| 麻豆国产尤物av尤物在线观看 | 亚洲男同1069视频| 欧美最大成人综合网| 黄色片一区二区| 欧美激情第99页| 久久久久久激情| 精品日韩一区二区| 亚洲无人区码一码二码三码| 亚洲国产你懂的| 久久国产精品视频在线观看| 成人午夜激情片| 久久一区二区精品| 日韩激情视频网站| 国产精品免费一区| 国产精品毛片一区二区在线看舒淇 | 国产精品永久免费| 国产精品人人妻人人爽| 久久久久久久亚洲精品| 日本中文字幕在线| 精品亚洲一区二区| 美女100%露胸无遮挡| 日韩亚洲欧美一区二区三区| 午夜诱惑痒痒网| 一本色道综合亚洲| www.色偷偷.com| 性做久久久久久免费观看| 日日碰狠狠丁香久燥| 国产精品美女一区二区三区| 久久久久久久久久久99| 国产精品国产三级国产普通话蜜臀 | 亚洲free嫩bbb| 久久中文精品| 7777奇米亚洲综合久久| 青青草91视频| 日本一区二区在线| 国产亚洲欧美一区在线观看| 黄色一级片在线看| 亚洲最快最全在线视频| 波多野结衣在线免费观看| 欧美日韩aaaaa| 蜜桃传媒一区二区亚洲| 亚洲精品国产品国语在线| 久久久久亚洲av成人片| 欧美激情按摩在线| 国产黄色小视频在线观看| 91精品综合久久久久久五月天| 美国一区二区三区在线播放| 日本一区二区不卡高清更新| 国产欧美日韩麻豆91| 黄页网站大全在线观看| 亚洲国产va精品久久久不卡综合| 韩国黄色一级片| 日韩电影免费观看在线观看| 久久久久久久久久免费视频| 日本在线精品视频| 精品在线免费视频| 农村寡妇一区二区三区| 亚洲免费观看高清完整版在线观看熊| 亚洲欧洲综合网| 日本高清不卡三区| 亚洲国产日韩欧美综合久久 | 欧美日本精品在线| 天堂成人国产精品一区| 老司机午夜免费福利视频| 偷拍日韩校园综合在线| 中文字幕乱码av| 欧美一区二三区| 成人午夜精品在线| 夫妻免费无码v看片| 精品国产露脸精彩对白| 91丨九色丨丰满| 亚洲高清精品中出| 色婷婷综合在线| 精品无码av在线| 青少年xxxxx性开放hg| 51久久夜色精品国产麻豆| 日本老熟俱乐部h0930| 热久久99这里有精品| 成人久久视频在线观看| 下面一进一出好爽视频| 日韩中文av在线| 久久国产精品99久久久久久老狼| 国产91xxx| 亚洲天堂av在线播放| 麻豆91小视频| 青娱乐精品在线| 97久久超碰福利国产精品…| 91丨porny丨国产入口| 麻豆精品免费视频| 国产精品免费一区二区三区都可以| 欧美经典三级视频一区二区三区| www..com.cn蕾丝视频在线观看免费版 | 很污很黄的网站| 亚洲资源在线看| 亚洲福利电影网| 九热视频在线观看| 久久偷看各类女兵18女厕嘘嘘| 粉嫩嫩av羞羞动漫久久久 | 日韩av中文在线| 日日摸夜夜添夜夜添精品视频| 亚洲一区二区三区精品在线观看 | 久久躁狠狠躁夜夜爽| 久久婷婷成人综合色| 亚洲国产精品久| 亚洲欧美日本国产有色| 亚洲精品小视频| 成人精品鲁一区一区二区| 中文字幕在线观看二区| 日本不卡久久| 亚洲精品久久久久中文字幕欢迎你 | 9999在线观看| 三级精品视频久久久久| 亚洲国产精品成人综合色在线婷婷 | 超级砰砰砰97免费观看最新一期 | 成人午夜免费在线| 国内自拍欧美激情| 亚洲国产欧美另类丝袜| 亚洲高清视频网站| 国产二级一片内射视频播放| 久久www免费人成精品| 亚洲欧美在线一区| 国产精品无圣光一区二区| 这里只有精品999| 亚洲欧美日韩中文字幕在线观看| 国产69精品久久久久9999apgf | 精品国产乱码一区二区三| 亚洲精品中文字幕在线播放| 欧美在线视频二区| 久久香蕉国产线看观看av| 亚洲一区二区不卡免费| 污污网站在线免费观看| 日本一卡二卡在线播放| 欧美一级免费在线观看| 欧美在线视频在线播放完整版免费观看 | 人妻少妇精品久久| 91社区国产高清| 国产婷婷成人久久av免费高清| 中文字幕一区在线观看视频| 熟妇高潮一区二区高潮| 神马午夜精品91| 激情视频免费网站| 欧美激情专区| 秋霞av国产精品一区| 精品成人佐山爱一区二区| 亚洲日本乱码在线观看| 麻豆精品视频在线观看视频| xxxx.国产| 中文字幕在线播放视频| 久久国产精品视频在线观看| 岛国一区二区三区高清视频| 欧美日本中文字幕| 精品久久一区二区三区| 一区二区三区久久| 狠狠色丁香九九婷婷综合五月| 91丨九色丨海角社区| 国产黄色录像视频| 永久免费黄色片| 乱子伦一区二区| 久久精品国产成人精品| 欧美xxxx在线观看| 欧美日韩在线观看视频| 久久久不卡影院| 激情av综合网| 黄色小视频免费观看| 四虎影院在线免费播放| 欧美日韩午夜视频| 爱爱的免费视频| 国产又粗又猛又爽又黄| 久久黄色免费看| 国产女主播自拍| 自拍偷拍一区二区三区| 久久亚洲高清| 亚洲综合小说区| 国产精品免费一区豆花| 国产成人av在线播放| 91sa在线看| 97免费在线视频| 国模私拍一区二区三区|