太陽雨

          痛并快樂著

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            67 Posts :: 3 Stories :: 33 Comments :: 0 Trackbacks

          #

          本文摘自孫衛(wèi)琴的《精通Hibernate:Java對(duì)象持久化技術(shù)詳情》
                Hibernate有如下5個(gè)核心接口:
          • Configuration接口:該對(duì)象用于配置并且根啟動(dòng)Hibernate。Hibernate應(yīng)用通過Configuration實(shí)例來指定對(duì)象-關(guān)系映射文件的位置或動(dòng)態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory實(shí)例。
          • SessionFactory接口:一個(gè)SessionFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源,應(yīng)用從SessionFactory中獲得Session實(shí)例。它具有如下特點(diǎn):

                        1)它是線程安全的,這意味著它的同一個(gè)實(shí)例可以被應(yīng)用的各個(gè)線程共享。

                        2)它是重量級(jí)的,這意味著不能隨意創(chuàng)建或銷毀它的實(shí)例。如果應(yīng)用只訪問一個(gè)數(shù)據(jù)庫(kù),只需創(chuàng)建一個(gè)SessionFactory實(shí)例,在應(yīng)用初始化的時(shí)候創(chuàng)建該實(shí)例。如果應(yīng)用同時(shí)訪問多個(gè)數(shù)據(jù)庫(kù),則需要為每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)單獨(dú)的SessionFactory實(shí)例。

                        之所以說SessionFactory是重量級(jí)的,是因?yàn)樗枰粋€(gè)很大的緩存,用來存放預(yù)定義的SQL語句以及映射元數(shù)據(jù)等。用戶還可以為SessionFactory配置一個(gè)緩存插件,這個(gè)緩存插件被稱為Hibernate的第二級(jí)緩存,該緩存用來存放被工作單元讀過的數(shù)據(jù),將來其它工作單元可能會(huì)重用這些數(shù)據(jù),因此這個(gè)緩存中的數(shù)據(jù)能夠被所有工作單元共享,一個(gè)工作單元通常對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)事務(wù)。

          • Session接口:該接口是Hibernate應(yīng)用使用最廣泛的接口。Session也被稱為持久化管理器,提供了和持久化相關(guān)的操作,如添加、更新、刪除、加載和查詢對(duì)象。Session具有一下特點(diǎn):

                       1)不是線程安全的,因此在設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)該避免多個(gè)線程共享同一個(gè)Session實(shí)例;

                       2)Session實(shí)例是輕量級(jí)的,所謂輕量級(jí),是指它的創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建和銷毀Session對(duì)象,例如為每個(gè)客戶請(qǐng)求分配單獨(dú)的Session實(shí)例,或者為每個(gè)工作單元分配單獨(dú)的Session實(shí)例。

                       Session有一個(gè)緩存,被稱為Hibernate的第一級(jí)緩存,它存放被當(dāng)前工作單元加載的對(duì)象。每個(gè)Session實(shí)例都有自己的緩存,這個(gè)Session實(shí)例的緩存,這個(gè)Session實(shí)例的緩存只能被當(dāng)前工作單元訪問。

          •  Transaction:該接口是Hibernate的數(shù)據(jù)庫(kù)事務(wù)接口,它對(duì)底層的事務(wù)接口做了封裝,底層事務(wù)接口包括:JDBC API、JTA(Java Transaction API)、CORBA(Common Object Requet Broker Architecture) API.

                       Hibernate應(yīng)用可通過一致的Transaction接口來聲明事務(wù)邊界,這有助于應(yīng)用在不同環(huán)境或容器中移植。

          •  Query和Criteria接口:它們是Hibernate的查詢接口,用于向數(shù)據(jù)庫(kù)查詢對(duì)象,以及控制執(zhí)行查詢的過程。Query實(shí)例封裝了一個(gè)HQL(Hibernate Query Language)查詢語句,HQL是面向?qū)ο蟮模妙惷邦惖膶傩悦皇潜砻氨淼淖侄蚊riteria接口完全封裝了基于字符串形式的查詢語句,比Query接口更加面向?qū)ο螅珻riteria接口更擅長(zhǎng)于執(zhí)行動(dòng)態(tài)查詢。
          posted @ 2008-10-21 14:24 小蟲旺福 閱讀(242) | 評(píng)論 (0)編輯 收藏

          Hibernate的對(duì)象有3種狀態(tài),分別為:瞬時(shí)態(tài)(Transient)、 持久態(tài)(Persistent)、脫管態(tài)(Detached)。處于持久態(tài)的對(duì)象也稱為PO(Persistence Object),瞬時(shí)對(duì)象和脫管對(duì)象也稱為VO(Value Object)。
          •         瞬時(shí)態(tài)

                  由new命令開辟內(nèi)存空間的java對(duì)象,

                 eg. Person person = new Person("amigo", "女");

                  如果沒有變量對(duì)該對(duì)象進(jìn)行引用,它將被java虛擬機(jī)回收。

                  瞬時(shí)對(duì)象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫(kù)的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系,在Hibernate中,可通過session的save()或saveOrUpdate()方法將瞬時(shí)對(duì)象與數(shù)據(jù)庫(kù)相關(guān)聯(lián),并將數(shù)據(jù)對(duì)應(yīng)的插入數(shù)據(jù)庫(kù)中,此時(shí)該瞬時(shí)對(duì)象轉(zhuǎn)變成持久化對(duì)象。

          •        持久態(tài)

                  處于該狀態(tài)的對(duì)象在數(shù)據(jù)庫(kù)中具有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí)。如果是用hibernate的delete()方法,對(duì)應(yīng)的持久對(duì)象就變成瞬時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中的對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián)。

                 當(dāng)一個(gè)session執(zhí)行close()或clear()、evict()之后,持久對(duì)象變成脫管對(duì)象,此時(shí)持久對(duì)象會(huì)變成脫管對(duì)象,此時(shí)該對(duì)象雖然具有數(shù)據(jù)庫(kù)識(shí)別值,但它已不在HIbernate持久層的管理之下。

                 持久對(duì)象具有如下特點(diǎn):

                 1. 和session實(shí)例關(guān)聯(lián);

                 2. 在數(shù)據(jù)庫(kù)中有與之關(guān)聯(lián)的記錄。

          •  脫管態(tài)

                  當(dāng)與某持久對(duì)象關(guān)聯(lián)的session被關(guān)閉后,該持久對(duì)象轉(zhuǎn)變?yōu)槊摴軐?duì)象。當(dāng)脫管對(duì)象被重新關(guān)聯(lián)到session上時(shí),并再次轉(zhuǎn)變成持久對(duì)象。

                 脫管對(duì)象擁有數(shù)據(jù)庫(kù)的識(shí)別值,可通過update()、saveOrUpdate()等方法,轉(zhuǎn)變成持久對(duì)象。

                 脫管對(duì)象具有如下特點(diǎn):

                 1.  本質(zhì)上與瞬時(shí)對(duì)象相同,在沒有任何變量引用它時(shí),JVM會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑺厥眨?/p>

                 2.  比瞬時(shí)對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)記錄標(biāo)識(shí)值。

          posted @ 2008-10-21 14:23 小蟲旺福 閱讀(283) | 評(píng)論 (0)編輯 收藏

          用eclipse,在導(dǎo)入相應(yīng)的包后(有人說不導(dǎo)包也有提示,因?yàn)槟J(rèn)的eclipse導(dǎo)入了jdk的包),eclipse會(huì)有代碼提示功能。
          那么XML文件能不能也這樣呢?其實(shí)也是可以的,只不過導(dǎo)包的地方不一樣。下面以spring為例(雖然Myeclipse6.5中已經(jīng)集成了,這里只是示范說明)。

          進(jìn)入:window -> Preference... -> MyEclipse -> Editors -> XML ->XML Catalog

          選擇:選中“User Specified Entries”,點(diǎn)擊“Add...”按鈕

          填入:

          URI: 請(qǐng)選擇本地文件系統(tǒng)上SPRING_HOME\dist\resources\spring-beans-2.0.xsd 文件
          Key Type: 選擇Schema Location
          Key: http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

          點(diǎn)擊確定

          將spring配置文件關(guān)閉再重新打開即可。可以使用MyEclipse XML Editor打開這些xml文件。

          posted @ 2008-06-23 22:29 小蟲旺福 閱讀(10546) | 評(píng)論 (1)編輯 收藏

          很早就聽說過eclipse可以集成jad,一直沒有試過,一直用的小穎和一個(gè)叫java decompiler (具體名字記不住了),不過還是沒有集成到eclipse中,每次查看源碼的時(shí)候,還需要找到相應(yīng)的class文件才可以反編譯,比較麻煩,畢竟很多class都是在jar包中,而且路徑很深。昨天閑來無聊,隨便找了找eclipse集成jad的反編譯工具,很簡(jiǎn)單,過程如下:
          需要兩個(gè)東東
          Jadclips插件,網(wǎng)址:http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download
          Jad反編譯工具,網(wǎng)址:http://www.kpdus.com/jad.html#download
          注意下載的時(shí)候認(rèn)準(zhǔn)版本。我下載的是net.sf.jadclipse_3.3.0.jarJad 1.5.8g for Windows 9x/NT/2000 on Intel platform

          開始具體的配置

          Jad下載后解壓,然后將解壓后的jad.exe文件復(fù)制到%JAVA_HOME%\BIN目錄下面(可以將jad.exe隨便放到哪,記住路徑,下面在eclipse配置中要用到)。

          直接將net.sf.jadclipse_3.3.0.jar 復(fù)制到eclipse的plugins目錄下。
          個(gè)人認(rèn)為這樣比較簡(jiǎn)單,如果大家喜歡把自己的plugins拿出來放到一個(gè)單獨(dú)的文件夾,可以自己google,這里不做過多介紹。

          然后啟動(dòng)eclipse,打開:Window->Preferences->Java->JadClipse

          1、Path to decompiler,這里設(shè)置反編譯工具jad的全路徑名,比如:%JAVA_HOME%\bin\jad.exe。 就是剛才jad解壓的路徑,例如在我的電腦中的路徑就是C:\Program Files\Java\jdk1.5.0_13\bin\jad.exe。

          2、Directory for temporary files,這里設(shè)置臨時(shí)文件路徑,無所謂了。

          至于Window->Preferences->Java->JadClipse目錄下的Debug,Directives,F(xiàn)ormatting,Misc目錄中的參數(shù)設(shè)置,自己看一下就能明白什么意思,可以不用管,這里就不羅嗦了。

          3、eclipse會(huì)自動(dòng)將JadClipse Class File Viewer設(shè)置成class文件的缺省打開方式。如果沒有默認(rèn),可以在Eclipse的Windows——> Perference——>General->Editors->File Associations中修改“*.class”默認(rèn)關(guān)聯(lián)的編輯器為“JadClipse Class File Viewer”。設(shè)置完成后,雙擊*.class文件,eclipse將自動(dòng)反編譯。我的是默認(rèn)了,大家有問題的可以試試。

          :對(duì)于存在源代碼的類,它不會(huì)強(qiáng)行反編譯,也就是說它還是會(huì)用eclipse自帶的Class File Viewer查看class文件。這點(diǎn)很重要哦。畢竟反編譯的不如人家的源碼好。
          :把鼠標(biāo)焦點(diǎn)放到這個(gè)如要查看源碼的方法上,然后按F3(eclipse查看源碼快捷鍵),呵呵~源代碼出現(xiàn)了。

          不過還是要說明一下,如果可以的話,還是盡量找官方的源碼(在eclipse指定源碼位置,就可以按F3查看,怎么指定?自己google),而且一般都帶說明文檔的,這樣的話,不必每次使用的時(shí)候都查看源碼,只要把她的API文檔導(dǎo)入就可以了(跟指定源碼一樣),開發(fā)的時(shí)候會(huì)方便一些,如果自己學(xué)習(xí)的話可以沒事看看源碼。

          posted @ 2008-06-20 11:13 小蟲旺福 閱讀(11071) | 評(píng)論 (7)編輯 收藏

               摘要: 把以前總結(jié)的一個(gè)java常用排序整理了一下。 插入排序: package org.rut.util.algorithm.support;       import org.rut.util.algorithm.SortUtil;    /** *//** &nb...  閱讀全文
          posted @ 2008-06-19 12:00 小蟲旺福 閱讀(591) | 評(píng)論 (0)編輯 收藏

          今天碰見一個(gè)很郁悶的事情,當(dāng)使用mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app來創(chuàng)建一個(gè)新項(xiàng)目時(shí),有時(shí)候會(huì)出現(xiàn)以下錯(cuò)誤:解決過程如下:

          [INFO] Scanning for projects...
          [INFO] Searching repository for plugin with prefix: 'archetype'.
          [INFO]
          ----------------------------------------------------------------------------
          [INFO] Building Maven Default Project
          [INFO]    task-segment: [archetype:create] (aggregator-style)
          [INFO]
          ----------------------------------------------------------------------------
          。。。。。。。
          [INFO] Velocimacro : initialization complete.
          [INFO] Velocity successfully started.
          [INFO] [archetype:create]
          [INFO] Defaulting package to group ID: com.mycompany.app
          [INFO]
          ------------------------------------------------------------------------
          [ERROR] BUILD ERROR
          [INFO]
          ------------------------------------------------------------------------
          [INFO] Failed to resolve artifact.

          GroupId: org.apache.maven.archetypes
          ArtifactId: maven-archetype-quickstart
          Version: RELEASE

          Reason: Unable to determine the release version

          Try downloading the file manually from the project website.

          Then, install it using the command:
              mvn install:install-file -DgroupId=org.apache.maven.archetypes
          -DartifactId=maven-arch
          etype-quickstart \
                  -Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file

            org.apache.maven.archetypes:maven-archetype-quickstart:jar:RELEASE

           [INFO]
          ------------------------------------------------------------------------
          [INFO] For more information, run Maven with the -e switch
          [INFO]
          ------------------------------------------------------------------------
          [INFO] Total time: 1 second
          [INFO] Finished at: Tue Apr 17 07:08:50 MDT 2007
          [INFO] Final Memory: 4M/8M
          [INFO]
          ------------------------------------------------------------------------

                  請(qǐng)注意紅色部分為錯(cuò)誤產(chǎn)生的根本原因,  由于maven還處于開發(fā)過程中,開發(fā)方極有可能已經(jīng)更新某個(gè)plug-in的版本,但本地plug-in metadata沒有版本的信息或者沒有最新版本的信息,致使maven無法下載正確的版本。同時(shí)請(qǐng)注意藍(lán)色部分,這是提示的解決辦法。具體步驟如下:
              1.打開網(wǎng)址:http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/
              2.選擇最新版本并且下載最新的“maven-archetype-quickstart-1.0-alpha-4.jar ”文件
              3.安裝這個(gè)archetype到maven本地倉(cāng)庫(kù)。使用命令如下:mvn install:install-file -DgroupId=org.apache.maven.archtypes -Dar
          tifactId=maven-archetype-quickstart -Dversion=1.0-alpha-4 -Dpackaging=jar -Dfile=c:\7000\maven\maven-archetype-quickstart-1.0-alpha-4.jar。注意-Dfile是剛下載的文件的路徑。
              現(xiàn)在在cmd中執(zhí)行mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app就可以創(chuàng)建新項(xiàng)目了。
          posted @ 2008-06-19 11:52 小蟲旺福 閱讀(296) | 評(píng)論 (0)編輯 收藏

               摘要: 這里不討論有關(guān)apache的commons-io中的FileUtils,只是一些基本的對(duì)文件的操作的代碼,有時(shí)間會(huì)整理一個(gè)FileUtils的用法的文章。 java中提供了io類庫(kù),可以輕松的用java實(shí)現(xiàn)對(duì)文件的各種操作。下面就來說一下如何用java來實(shí)現(xiàn)這些操作。   新建目錄 <%@ page contentType="text/html;ch...  閱讀全文
          posted @ 2008-06-19 11:40 小蟲旺福 閱讀(524) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 宜州市| 莲花县| 沅陵县| 稻城县| 尼勒克县| 平果县| 电白县| 大余县| 民乐县| 湖州市| 正安县| 时尚| 临猗县| 舞钢市| 玉山县| 遂溪县| 错那县| 瓮安县| 娄底市| 丹阳市| 镇江市| 阿图什市| 赤壁市| 凤台县| 厦门市| 建平县| 五家渠市| 安顺市| 石景山区| 化隆| 佛冈县| 游戏| 武鸣县| 丰原市| 三门峡市| 藁城市| 博客| 嘉兴市| 六枝特区| 五家渠市| 宁夏|