成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

Hibernate 的原理與配置

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

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

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

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

  閱讀導航

  “Hello World”“Hello world”示例程序讓您對Hibernate有一個簡單的認識。
  理解Hibernate的架構(gòu)介紹Hibernate接口的主要功能。
  核心接口Hibernate有5個核心接口,通過這幾個接口開發(fā)人員可以存儲和獲得持久對象,并且能夠進行事務控制
  一個重要的術語:TypeType是Hibernate發(fā)明者發(fā)明的一個術語,它在整個構(gòu)架中是一個非?;A、有著強大功能的元素,一個Type對象能將一個Java類型映射到數(shù)據(jù)庫中一個表的字段中去。
  策略接口Hibernate與某些其它開源軟件不同的還有一點――高度的可擴展性,這通過它的內(nèi)置策略機制來實現(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ù)的構(gòu)造函數(shù),在我們以后的代碼中我將繼續(xù)使用這種風格來編寫持久類的代碼。

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

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

  以上這段代碼正是我們所期望的結(jié)果:它打印“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();

  以上這段代碼調(diào)用了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()調(diào)用時,Hibernate會為它自動賦予一個唯一的值(我們將在后面內(nèi)容中講述它是如何生成這個值的)。

  我們假設你已經(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()調(diào)用時,Hibernate會將這段HQL語言翻譯成如下的SQL語句:

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

  以下就是運行結(jié)果:

  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">
 ?。糷ibernate-mapping>
  <class name="hello.Message" table="MESSAGES">
 ?。糹d name="id" column="MESSAGE_ID">
  <generator class="increment"/>
 ?。?id>
  <property name="text" column="MESSAGE_TEXT"/>
 ?。糾any-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();

  以上這段代碼在調(diào)用時,Hibernate內(nèi)部自動生成如下的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對象調(diào)用setNextMessage()方法將第二個Message對象作為它的下一條消息的引用時,第二條消息會無需調(diào)用save()方法,便可以自動地保存在數(shù)據(jù)庫中。這種特色被稱為“級聯(lián)保存”,它也免去了我們顯式地對第二個Message對象調(diào)用save()方法之苦。

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

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


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

  理解Hibernate的架構(gòu)

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

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

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

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

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

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

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

  Hibernate使用了J2EE架構(gòu)中的如下技術:JDBC、JTA、JNDI。其中JDBC是一個支持關系數(shù)據(jù)庫操作的一個基礎層;它與JNDI和JTA一起結(jié)合,使得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í)行面向?qū)ο蟮臉藴驶樵儭?

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

  Callback 接口

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

   一個重要的術語:Type

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

  Hibernate內(nèi)置很多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與某些其它開源軟件不同的還有一點――高度的可擴展性,這通過它的內(nèi)置策略機制來實現(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)在回顧一下我們先前的內(nèi)容:我們寫出了一個示例程序,并簡要地講解了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)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Hibernate 的原理與配置》相關的同類信息!
  • 本頁收集關于Hibernate 的原理與配置的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    九九热这里只有在线精品视| 亚洲一级在线观看| 日本私人网站在线观看| 黄色一级片av| 欧美黄视频在线观看| 日韩精品永久网址| 亚洲视频日韩| 色狠狠一区二区三区香蕉| 久久精品这里只有精品| 最新热久久免费视频| 茄子视频成人在线观看| 日韩情涩欧美日韩视频| 午夜精品一区二区三区四区| 国产成人一区二| 五月综合网站| 极品尤物一区| 中文字幕一区二区三区四区五区| 国产高清自拍99| 一区二区视频免费看| 精品国产乱码久久久久久牛牛| 日本不卡一区二区三区在线观看| av 一区二区三区| av文字幕在线观看| 新版中文字幕在线资源| 久久神马影院| 午夜视频在线观看一区二区| 亚洲午夜久久久久久久| 欧美电影《睫毛膏》| 美女少妇全过程你懂的久久| 一本到12不卡视频在线dvd| 九色国产蝌蚪视频| 亚洲第一天堂久久| 中文一区在线观看| 黑人与亚洲人色ⅹvideos| 免费男女羞羞的视频网站中文子暮| 成人免费观看在线观看| 自由的xxxx在线视频| 久久精品国产亚洲精品2020| 中文字幕无人区二| 亚洲最大的成人网| 亚洲一区二区三区毛片| 亚洲人成人99网站| 欧美另类高清videos的特点| 成人精品福利| 久久久亚洲国产美女国产盗摄| 日韩精品一区二区三区中文| 人人草人人干| 欧美色123| 国产免费无遮挡吸奶头视频| 免费黄色在线看| 青青久精品观看视频最新| 操日韩av在线电影| 黑人玩弄人妻一区二区三区| 免费在线看黄色片| 色先锋最新资源| 久久国产精品高清| 色婷婷一区二区三区四区| 亚洲人成网站色在线观看| 中国动漫在线观看完整版免费| 亚洲国产精品成人综合| 一本加勒比波多野结衣| 韩日成人av| 久久成人在线视频| 天天看片中文字幕| 国产综合在线视频| 久久亚洲精品小早川怜子66| 日韩欧美精品一区二区综合视频| 蜜桃成人在线视频| 免费看一级大片| 美女搞黄视频在线观看| 一级毛片aaaaaa免费看| 精品在线亚洲视频| 国产在线观看一区二区三区| 久久香蕉网站| 成人欧美一区二区三区黑人免费| 日韩一区二区久久| 亚洲最大的av网站| 天天操天天操一操| 日本福利视频| √最新版天堂资源网在线| 激情六月婷婷综合| 中文字幕无码毛片免费看| 国内精品久久久久久久久电影网| 国产欧美一区二区精品性色| 亚洲国产精品一区二区久久| 91中文字幕在线视频| aaaaaaaa毛片| 国产亚洲免费的视频看| 妖精视频一区二区三区| 麻豆一区二区三区| 欧美亚洲成人免费| 欧美亚洲一级二级| 成人日韩在线观看| 亚洲精品麻豆| 黄色小视频在线看| 625成人欧美午夜电影| 在线观看wwww| 日本欧美在线看| 欧美成人女星排行榜| 成人精品视频一区二区三区尤物| jizzjizz少妇亚洲水多| 日韩中文字幕久久| 成人欧美一区二区三区黑人免费| 导航福利在线| 人妻aⅴ无码一区二区三区| 国产日韩欧美黄色| 一级黄色片大全| 午夜视频一区| 中文在线手机av| 欧美日韩免费| 久久精品国产亚洲精品| 99精品一区二区三区无码吞精| 欧美日本视频一区| 一个人免费观看视频www在线播放| www.操操操| 在线不卡一区二区三区| 黄色美女网站在线观看| 免费观看精品视频| 美女扒开腿让男人桶爽久久软| 884aa四虎免费影库4h| 91久久在线视频| 国产精品久久久久久久电影| 欧美午夜寂寞影院| 久久久精品一品道一区| 日韩欧美黄色大片| 国产黄色一级大片| 国产三级短视频| 国产精品久久久久久模特| 黄毛片在线观看| 国产精品色视频| 国产精品一区二区欧美| 日韩精品免费| 午夜影院福利社| 狠狠色丁香九九婷婷综合五月| 国产91ⅴ在线精品免费观看| 欧美美女一区二区三区| 国产精品一区二区三区四区| 亚洲精品国精品久久99热| 亚洲第一综合网| 夜夜爽av福利精品导航| 日韩亚洲一区在线| 美女喷水网站| 日韩一级在线视频| 欧美日韩二区三区| 日本高清视频一区| 日韩欧美一区二区三区不卡视频| 视频在线不卡免费观看| 国产丝袜在线视频| 82av视频| 奇米色一区二区三区四区| 爱福利在线视频| www.成人三级视频| 久久久久久噜噜噜久久久精品| 国产男男gay体育生网站| 亚洲麻豆精品| 桃花网日韩影视在线观看视频| 四虎影视成人永久免费观看视频| 男人和女人啪啪网站| 日本一区视频在线观看| 亚洲av无码一区二区乱子伦| 在线一级视频| 91丝袜脚交足在线播放| 国产香蕉免费精品视频| 经典三级在线视频| 欧美精品色网| 天天爽天天爽天天爽| 欧美午夜性色大片在线观看| 国产欧美日本在线| 性做久久久久久免费观看欧美| 久久久综合免费视频| 亚洲成人毛片| 巨胸大乳www视频免费观看| 欧美一级视频在线| 日韩精品卡通动漫网站| 国产精品日本欧美一区二区三区| 午夜精品一二三区| 国语自产偷拍精品视频偷| 国产一二三四五区| 成年人性生活视频| 蜜臀av粉嫩av懂色av| 天堂av网在线| 欧美一区二区三区电影在线观看| 日韩不卡在线| 在线精品亚洲| 天天操综合网| 中文字幕亚洲欧美在线不卡| 日韩av不卡一区二区| 日韩特级毛片| 国产福利一区二区在线精品| 久草综合在线| 亚洲xxxx做受欧美| 欧美日韩不卡中文字幕在线| 日韩av中文字幕第一页| 国产成人av免费看| 欧美爱爱网站| 男女av在线| 国产伦精品一区二区三区高清版禁| …久久精品99久久香蕉国产| 草逼视频免费看| 另类一区二区| 亚洲最大的免费视频网站| 天堂蜜桃一区二区三区| 青青久久av北条麻妃海外网| 黄色aaa视频| 欧美高清另类hdvideosexjaⅴ| 日韩精品第一页| 狠狠搞狠狠干| 天天天综合网| 亚洲熟妇无码久久精品| 亚洲成人黄色网| av在线中出| 亚洲欧美强伦一区二区| 日韩欧美精品中文字幕| 高清毛片在线观看| 神马久久久久久久久| 国产高清精品软件丝瓜软件| 激情综合电影网| 中文在线最新版地址| 国产精品一二| 天天综合中文字幕| 黄色免费视频在线观看| 婷婷视频在线| 伊人久久大香线蕉综合热线| 亚洲国产日韩一区| 99精品视频免费| 国产情侣久久久久aⅴ免费| 久久99精品国产自在现线小黄鸭| 亚洲激情网址| 麻豆视频入口| 香蕉久久一区| 中日韩免费毛片| 在线观看91| 成人在线观看黄色| 一级片在线视频| 91精品久久久久久久| 伊人影院在线观看视频| 无码精品在线观看| 国产精品白丝jk黑袜喷水| 婷婷激情四射五月天| 亚洲成av人片| 色先锋av资源中文字幕| 中文字幕第一区| 菠萝蜜视频国产在线播放| 成人激情电影一区二区| 中文字幕色视频| 欧美日韩精品一区二区在线播放| 亚洲欧美中文另类| 亚洲综合视频在线观看| 亚洲6080在线| 欧美xxxx视频| 在线视频日本亚洲性| 欧美日韩中文在线视频| 99精品免费| 亚洲国产中文字幕在线| 久久国产精品影院| 欧美成aaa人片在线观看蜜臀| 日本久久伊人| 国产性猛交╳xxx乱大交| 5566日本婷婷色中文字幕97| 免费看91视频| 2020中文字幕在线| 久久久青草青青国产亚洲免观| 欧美日韩国产不卡| 波波电影院一区二区三区| 午夜小视频在线播放| www.桃色av嫩草.com| 免费av网站在线看| 天天天天天天操| 国产情人节一区| 精品国产乱码久久久久久久久| 激情av一区二区| 精品国产乱码久久久久久樱花| 日本黄色动态图| 在线欧美三级| 国产香蕉精品视频一区二区三区| 亚洲在线视频网站| 国产亚洲欧美日韩高清| 懂色av一区二区在线播放| 亚洲图片欧美| 欧美xxxx18| 国产精品永久免费观看| 日韩成人高清在线| 欧美一区二区久久久| 同性恋视频一区| 日韩av影视大全| 久久国产精品久久w女人spa| 久久国产精品系列| 91人妻一区二区| 国产日韩久久久| 久久精品日韩欧美| 米奇777超碰欧美日韩亚洲| 欧美日韩视频一区二区三区| 亚洲人成影视在线观看| 亚洲桃色在线一区| 免费吸乳羞羞网站视频| 国产三级aaa| 完整版免费av片| 韩国版免费三体| 亚洲欧洲av一区二区三区久久| 免费观看中文字幕| 日韩一区中文| 欧美午夜片在线观看| 国产三级黄色片| 亚洲精品国产熟女久久久| 老司机午夜免费福利| 精品亚洲成a人片在线观看| 国产精品成人国产乱一区| 国产热re99久久6国产精品| 成人做爰视频www| 91在线一区二区| 国内精品久久久久久| 国产精品视频一| 免费av小说| 成人欧美精品一区二区| 色悠悠在线视频| 日韩欧美国产电影| 第一区第二区在线| 精品亚洲欧美日韩| 卡通动漫精品一区二区三区| 久草手机在线观看| 欧美日韩在线精品| 狠狠v欧美ⅴ日韩v亚洲v大胸| 中文字幕精品一区二区三区精品| 免费a在线观看播放| 视频1区2区3区| 亚洲一区二区三区视频播放| 亚洲精品第一区二区三区| 国产一区一区|