ArrayList 讀快 改 慢  (底層數組實現)

          LinkedList 改快 讀 慢 (鏈表 實現)

          Hash  兩者之間


          重復是指equals相同就是重復

          當對象當作索引的時候(鍵、值):重寫equals方法,必須重寫hashCode方法,保證equals了,要保證hashCode也相同

          Set: 沒有順序,不可以重復

          List: 有順序,可以重復

          Map:一個叫鍵,一個值  兩個兩個往里面放的


          Collection方法 舉例子一:

          package com.Collection;

          import java.util.ArrayList;

          import java.util.Collection;

          public class CollectionTest {

              public static void main(String []args){

                 Collection c = new ArrayList();

                 c.add("hello");

                 c.add(new Integer(12));

                 c.add("lsb");

           

                 System.out.println(c.size());

                 System.out.println(c);

           

              }

          }

          顯示結果:

          3

          [hello, 12, lsb] 

          分析:打印 c  的時候調用c.toString()方法,顯示的是c中的所有的內容并用[]擴住


          Collection方法 舉例二: Iterator

          package com.Collection;

          import java.util.Collection;

          import java.util.HashSet;

          import java.util.Iterator;

          public class CollectionTest {

              public static void main(String []args){

                 Collection c = new HashSet();

                 c.add("hello");

                 c.add("abc");

                 c.add("lsb");

                

                 Iterator iter = c.iterator();

                 while(iter.hasNext()){

                     String str = (String)iter.next();

                     System.out.println(str);

                 }

              }

          }

          顯示結果:

          hello

          lsb

          abc

           

          Collection方法 舉例二: Set方法

          package com.Collection;

          import java.util.Collection;

          import java.util.HashSet;

          import java.util.Iterator;

           

          public class CollectionTest {

              public static void main(String []args){

                 Collection c1 = new HashSet();

                 c1.add("a");

                 c1.add("b");

                 c1.add("c");

           

                 Collection c2 = new HashSet();

                 c2.add("a");

                 c2.add("b");

                 c2.add("d");

                

                 Collection cn = new HashSet(c1);

                 cn.retainAll(c2);  //取兩個集合的交集

                

                 Collection cm = new HashSet(c1);

                 cm.addAll(c2);

                

                 System.out.println(cn);

                 System.out.println(cm);//取兩個集合的并集

              }

          顯示結果:

          [a, b]

          [d, a, c, b]









          當對象要比較大小的時候,那要看該對象是否實現了Comparable接口,該接口中只有一個

          方法public int compareTo(Object obj);(如果為jdk1.5以上那么參數為T 泛型),這樣才可以比較大小與排序

           



          MAP



          posted @ 2009-04-06 13:36 胡鵬 閱讀(2507) | 評論 (2)編輯 收藏

          下面的程序被設計用來打印它的類文件的名稱。如果你不熟悉類字面常量,那么我告訴你Me.class.getName()將返回Me類完整的名稱,即“com.javapuzzlers.Me”。那么,這個程序會打印出什么呢?

          package com.javapuzzlers;

          public class Me {

              public static void main(String[] args){

                  System.out.println(

                       Me.class.getName().

                          replaceAll(".","/") + ".class");

              }

          }

          該程序看起來會獲得它的類名(“com.javapuzzlers.Me”),然后用“/”替換掉所有出現的字符串“.”,并在末尾追加字符串“.class”。你可能會認為該程序將打印com/javapuzzlers/Me.class,該程序正式從這個類文件中被加載的。如果你運行這個程序,就會發現它實際上打印的是///////////////////.class。到底怎么回事?難道我們是斜杠的受害者嗎?

          問題在于String.replaceAll接受了一個正則表達式作為它的第一個參數,而并非接受了一個字符序列字面常量。(正則表達式已經被添加到了Java平臺的1.4版本中。)正則表達式“.”可以匹配任何單個的字符,因此,類名中的每一個字符都被替換成了一個斜杠,進而產生了我們看到的輸出。

          要想只匹配句點符號,在正則表達式中的句點必須在其前面添加一個反斜杠(")進行轉義。因為反斜杠字符在字面含義的字符串中具有特殊的含義——它標識轉義字符序列的開始——因此反斜杠自身必須用另一個反斜杠來轉義,這樣就可以產生一個轉義字符序列,它可以在字面含義的字符串中生成一個反斜杠。把這些合在一起,就可以使下面的程序打印出我們所期望的com/javapuzzlers/Me.class

          package com.javapuzzlers;

          public class Me {

              public static void main(String[] args){

                  System.out.println(

                      Me.class.getName().replaceAll(""".","/") + ".class");

              }

          }

          為了解決這類問題,5.0版本提供了新的靜態方法java.util.regex.Pattern.quote。它接受一個字符串作為參數,并可以添加必需的轉義字符,它將返回一個正則表達式字符串,該字符串將精確匹配輸入的字符串。下面是使用該方法之后的程序:

          package com.javapuzzlers;

          import java.util.regex.Pattern;

          public class Me {

              public static void main(String[] args){

                  System.out.println(Me.class.getName().

                                 replaceAll(Pattern.quote("."),"/") + ".class");

              }

          }

          該程序的另一個問題是:其正確的行為是與平臺相關的。并不是所有的文件系統都使用斜杠符號來分隔層次結構的文件名組成部分的。要想獲取一個你正在運行的平臺上的有效文件名,你應該使用正確的平臺相關的分隔符號來代替斜杠符號。這正是下一個謎題所要做的。

          posted @ 2009-04-06 13:26 胡鵬 閱讀(655) | 評論 (0)編輯 收藏
          TB_OA_DUANXIN 表中的    OADX_ID  字段為自動增長
          首先創個sequence :
           create sequence SEQ_TB_OA_DUANXIN
          minvalue 1
          maxvalue 9999999999
          start with 1
          increment by 1
          cache 20;
           
          再創建個觸發器:  
          create or replace trigger TR_TB_OA_DUANXIN_ID_INC
            before insert on TB_OA_DUANXIN
            for each row
          declare
            -- local variables here
          tmp NUMBER;
          begin
            select SEQ_TB_OA_DUANXIN.nextval into tmp from dual;
            :new.OADX_ID := to_char(tmp);
          end TR_TB_OA_DUANXIN_ID_INC;
          posted @ 2009-04-06 12:20 胡鵬 閱讀(282) | 評論 (0)編輯 收藏
          需要設置server character set , database character set, client character set,如果有一個不大一樣,就有可能導致亂碼

          server character set,client character set可以在mysql config文件中設置,比如設置為utf8:

          vi /etc/my.cnf

          # server
          [mysqld]
          default_character_set=utf8

          # client
          [mysql]
          default_character_set=utf8

          然后重啟mysqld。設置database 字符集,可以在mysql中進行。對于新建database:

          create database database_name default character set utf8;

          對于已存在database:
          alter database database_name default character set utf8;

          改進jdbc client的字符集, 在設置連接字串時設定:如


          jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

          posted @ 2009-04-06 12:19 胡鵬 閱讀(310) | 評論 (0)編輯 收藏
          有時候完全備份, 當還原的時候說不時數據庫文件不讓還原, 解決辦法:
                  可以直接復制數據庫文件, xxx.mdf 和  xxx.ldf
           
                  用 sp_attach_db  存儲過程 就能搞定.
           
          示例  
            下面的示例將   pubs   中的兩個文件附加到當前服務器。  
             
            EXEC   sp_attach_db   @dbname   =   N'pubs',    
                  @filename1   =   N'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\pubs.mdf',    
                  @filename2   =   N'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\pubs_log.ldf'  
           
           
          N表示Unicode的含義,就象類型中有varchar和nvarchar一樣,一個Unicode字符占兩個字節.使用N'的情況主要是在雙字節系統環境中強制系統對每個字符用Unicode標準來解釋,否則如果你的數據庫.mdf文件是中文名而又不加N'的話,數據庫加載后名稱可能就變成亂碼,因為系統按單字節處理字符造成!
           
           
          ............................................................
           
           
          如果確認是SQL   SERVER無法啟動,請按照下面步驟操作:  
            1.重裝SQL   SERVER(注意要保留原來數據庫的數據庫文件,日志文件可不要)  
            2.在SQL   Analysis中用sp_attach_db將數據庫加到服務器  
             
            sp_attach_db用法:  
            sp_attach_db  
            將數據庫附加到服務器。  
             
            語法  
            sp_attach_db   [   @dbname   =   ]   'dbname'  
                    ,   [   @filename1   =   ]   'filename_n'   [   ,...16   ]  
             
            參數  
            [@dbname   =]   'dbname'  
             
            要附加到服務器的數據庫的名稱。該名稱必須是唯一的。dbname   的數據類型為   sysname,默認值為   NULL。    
             
            [@filename1   =]   'filename_n'  
             
            數據庫文件的物理名稱,包括路徑。filename_n   的數據類型為   nvarchar(260),默認值為   NULL。最多可以指定   16   個文件名。參數名稱以   @filename1   開始,遞增到   @filename16。文件名列表至少必須包括主文件,主文件包含指向數據庫中其它文件的系統表。該列表還必須包括數據庫分離后所有被移動的文件。  
             
            返回代碼值  
            0(成功)或   1(失敗)  
             
            結果集  
            無  
             
            注釋  
            只應對以前使用顯式   sp_detach_db   操作從數據庫服務器分離的數據庫執行   sp_attach_db。如果必須指定多于   16   個文件,請使用帶有   FOR   ATTACH   子句的   CREATE   DATABASE。  
             
            如果將數據庫附加到的服務器不是該數據庫從中分離的服務器,并且啟用了分離的數據庫以進行復制,則應該運行   sp_removedbreplication   從數據庫刪除復制。  
             
            權限  
            只有   sysadmin   和   dbcreator   固定服務器角色的成員才能執行本過程。  
          posted @ 2009-04-06 12:18 胡鵬 閱讀(1944) | 評論 (0)編輯 收藏

          剛開始使用SQL Server 2000,就給了我一個下馬威。不過最終還是解決了。具體情況和解決方法:
            安裝SQL Server 2000的操作系統是Windows 2000 Profession Edition,安裝簡體中文標準版。會提示該版本的操作系統不能安裝服務器組件,只能安裝SQL Server 2000個人版。于是退出,選擇安裝個人版。卻出現了新的錯誤: 以前的某個程序安裝已在安裝計算機上創建掛起的文件操作。運行安裝程序之前必須重新啟動計算機。  接著按照提示重啟計算機,再安裝,仍然出現同樣的提示。再網上查找相關資料,得知是安裝程序在先前的安裝過程中在系統注冊表留下某些信息,導致不能安裝。于是經過多次試,發現刪除掉如下鍵值信息即可安裝:在運行窗口輸入regedit,打開注冊表編輯器,在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager中找到PendingFileRenameOperations 刪除該鍵值,關閉注冊表編輯器。重新安裝SQL Server 2000,哈哈,久違的安裝界面終于浮出水面了。
            這個鍵值是安裝程序暫掛項目,只要找到對應的應用程序清除掉就行了。

          posted @ 2009-04-06 12:16 胡鵬 閱讀(257) | 評論 (0)編輯 收藏

          原因分析:
                     ws2_32.dll是Windows Sockets應用程序接口,用于支持Internet和網絡應用程序。程序運行時會自動調用ws2_32.dll文件,ws2_32.dll是個動態鏈接庫文件,位于系統文件夾中,Windows在查找動態鏈接庫文件時,會先在應用程序當前目錄搜索,如果沒有找到然后才會搜索Windows所在目錄,如果還是沒有會搜索system32和system目錄。一些病毒利用此原理在殺軟目錄中建立了ws2_32.dll文件或文件夾,在殺軟看來這是一個它需要的文件而調用,這個所謂的“文件”又不具備真正地ws2_32.dll文件所具有的功能,所以殺軟就無法運行了.提示:應用程序正常初始化(0xc00000ba)失敗

          解決辦法:
                 到殺毒軟件的安裝目錄找到以"ws2_32.dll"命名的文件或文件夾,刪除即可。注意:如果看不到"ws2_32.dll"文件夾,原因是該文件夾加了系統隱藏屬性,即使找到"ws2_32.dll"文件夾也無法刪除,原因是里面有一個名為1.的文件夾,該文件夾windows環境不能識別,因此出現系統找不到路徑的提示。為此,本博發布用于清除"ws2_32.dll"文件夾的專用工具,使用方法是下載解壓后將anti_ws.exe復制到殺毒軟件的安裝目錄,然后運行anti_ws.exe即可。>>點擊進入下載

          友情提示:
                      一般只刪除這個文件是解決不了問題的,因為病毒程序會監視系統,當發現該文件沒了會自動恢復。目前已知的情況是中了病毒Win32.Troj.Romdrivers.ka ,請下載使用該病毒專殺工具:
          http://hi.baidu.com/peaset/blog/item/82226e891f44fab20e244462.html

          posted @ 2009-04-06 12:12 胡鵬 閱讀(374) | 評論 (0)編輯 收藏

          Spring 對AOP的支持(采用Annotation的方式)

           

          1.       spring依賴庫

          *SPRING_HOME/dist/spring.jar

          *SPRING_HOME/lib/Jakarta-commons/commons-logging.jar

          *SPRING_HOME/lib/log4j/log4j-1.2.14.jar

          *SPRING_HOME/lib/aspectj/*.jar

          2.       采用Aspect定義切面

          3.       在Aspect定義Pointcut和Advice

          4.       啟用AspectJ對Annotation的支持并且將Aspect類和目標對象配置到Ioc容器中



          注意:在這種方法定義中,切入點的方法是不被執行的,它存在的目的僅僅是為了重用切入點  即Advice中通過方法名引用這個切入點

           

           

          AOP:

               Cross cutting concern

                Aspect

                Advice

                Pointcut

                Joinpoint

                Weave

               Target Object

                Proxy

               Introduction

           

           

          Spring 對AOP的支持(采用配置文件的方式)

           

          1.spring依賴庫

          *SPRING_HOME/dist/spring.jar

          *SPRING_HOME/lib/Jakarta-commons/commons-logging.jar

          *SPRING_HOME/lib/log4j/log4j-1.2.14.jar

          *SPRING_HOME/lib/aspectj/*.jar

           

          2.配置如下:

          <aop:config>

              <aop:aspect id="security" ref="securityHandler">

                  <aop:pointcut id="allAddMethod" expression="execution(* com.lsb.spring.UserManagerImpl.add*(..))"/>

                  <aop:before method="checkSecurity" pointcut-ref="allAddMethod" />

              </aop:aspect>

              </aop:config>

           

           

           

          Spring 對AOP的支持(JoinPoint參數介紹)

           

          Aspect默認情況不用實現接口,但對于目標對象(UserManagerImpl.java),在默認情況下必須實現接口, 如果沒有實現接口必須引入CGLIB庫

           

          我們可以通過Advice中添加一個JoinPoint參數,這個值會由spring自動傳入,從JoinPoint中可以取得參數值、方法名等等

           

           

           

          Spring 對AOP的支持

           

          1.       如果目標對象實現了接口,默認情況下會采用JDK的動態代理實現AOP

          2.       如果目標對象實現了接口,可以強制使用CGLIB實現AOP

          3.       如果目標對象沒有實現了接口,必須采用CGLIB庫,spring會在JDK動態代理和CGLIB之間轉換

          4.        

           

          如何強制使用CGLIB實現AOP?

          *添加CGLIB庫,SPRING_HOME/lib/cglib/*.jar

          *在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

           

          JDK動態代理和CGLIB字節碼生成的區別?

                 *JDK動態代理只能對實現了接口的類生成代理,而不能針對類

                 *CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法,因為是繼承,所以該類最好不要申明成final

           


          posted @ 2009-04-06 12:07 胡鵬 閱讀(342) | 評論 (0)編輯 收藏

          本書所用軟件、使用版本、下載地址列表:

          (1)JDK:
          本書使用版本:1.5.0
          官方網站:http://java.sun.com/
          下載頁面:http://java.sun.com/javase/downloads/index_jdk5.jsp
          下載文件:jdk-1_5_0_14-windows-i586-p.exe

          (2)MySQL:
          本書使用版本:5.1.22
          官方網站:http://www.mysql.com/
          下載頁面:http://dev.mysql.com/downloads/mysql/5.1.html
          下載地址:http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-noinstall-5.1.22-rc-win32.zip/from/pick#mirrors
          下載文件:mysql-noinstall-5.1.22-rc-win32.zip

          SQL-Front客戶端:
          本書使用版本:3.3
          官方網站:http://www.sql-front.com/
          下載頁面:http://www.sql-front.com/download.html
          下載地址:http://www.omnipotus.com/download/SQL-Front_Setup.exe
          下載文件:SQL-Front_Setup.exe

          (3)Tomcat:
          本書使用版本:5.5.25
          官方網站:http://tomcat.apache.org/
          下載頁面:http://tomcat.apache.org/download-55.cgi
          下載地址:http://apache.mirror.phpchina.com/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25.exe
          下載文件:apache-tomcat-5.5.25.exe

          (4)Eclipse:
          本書使用版本:3.1.1
          官方網站:http://www.eclipse.org/
          下載頁面:http://archive.eclipse.org/eclipse/downloads/index.php
          下載地址:http://archive.eclipse.org/eclipse/downloads/drops/R-3.1.1-200509290840/download.php?dropFile=eclipse-SDK-3.1.1-win32.zip
          下載文件:eclipse-SDK-3.1.1-win32.zip

          Eclipse中文語言包:
          下載頁面:http://archive.eclipse.org/eclipse/downloads/drops/L-3.1.1_Language_Packs-200510051300/index.php
          下載文件:NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip,NLpack1-eclipse-SDK-3.1.1a-win32.zip 

          MyEclipse:
          本書使用版本:4.0.2
          官方網站:http://www.myeclipseide.com/
          下載頁面:http://www.myeclipseide.com/module-htmlpages-display-pid-4.html
          下載地址:http://www.myeclipseide.com/Downloads-req-getit-lid-45.html
          下載文件:EnterpriseWorkbenchInstaller_4.0.2GA_E3.1.exe

          (5)CVS:
          本書使用版本:2.5
          官方網站:http://www.cvsnt.org/
          下載頁面:http://www.cvsnt.org/
          下載地址:http://www.march-hare.com/downloads/(S(2dgeeg55tshsv245f4oitq55))/index.aspx
          下載文件:cvsnt-2.5.03.2382.msi

          (6)Struts:
          本書使用版本:1.2.9
          官方網站:http://struts.apache.org/
          下載頁面:http://struts.apache.org/1.2.9/index.html
          下載地址:http://archive.apache.org/dist/struts/binaries/struts-1.2.9-bin.zip
          下載文件:struts-1.2.9-bin.zip

          (7)Struts2:
          本書使用版本:2.0.9
          官方網站:http://struts.apache.org/
          下載頁面:http://struts.apache.org/2.0.9/index.html
          下載地址:http://archive.apache.org/dist/struts/binaries/struts-2.0.9-all.zip
          下載文件:struts-2.0.9-all.zip

          (8)Hibernate:
          本書使用版本:3.0
          官方網站:http://www.hibernate.org/
          下載頁面:http://sourceforge.net/project/showfiles.php?group_id=40712
          下載地址:http://downloads.sourceforge.net/hibernate/hibernate-3.0.zip?modtime=1112314767&big_mirror=1
          下載文件:hibernate-3.0.zip

          MiddleGen-Hibernate:
          本書使用版本:2.1
          官方網站:http://boss.bekk.no/boss/middlegen/
          下載頁面:http://sourceforge.net/project/showfiles.php?group_id=36044
          下載地址:http://downloads.sourceforge.net/middlegen/middlegen-2.1.zip?modtime=1096973436&big_mirror=0
          下載文件:middlegen-2.1.zip

          (9)Spring:
          本書使用版本:2.0.6
          官方網站:http://www.springframework.org/
          下載頁面:http://www.springframework.org/download
          下載地址:http://downloads.sourceforge.net/springframework/spring-framework-2.0.6.zip
          下載文件:spring-framework-2.0.6.zip


          (10)Ant:
          本書使用版本:1.7.0
          官方網站:http://ant.apache.org/
          下載頁面:http://ant.apache.org/bindownload.cgi
          下載地址:http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip
          下載文件:apache-ant-1.7.0-bin.zip
          說明:考慮到版權問題,我們只提供了這些軟件的下載鏈接地址。這些下載地址在本書寫作時都已經經過了驗證確認,有些鏈接也許需要您注冊登錄后才能夠下載。如果下載的鏈接地址不存在,則表明該網站已經移除了該鏈接,請您在指定的官方網站上找到下載的頁面來下載對應版本的文件。

          本書配套光盤包含以下目錄:


          1.blank目錄

          在該目錄下包含了本書架構過程中,部署每一種技術所需要的jar、tld、xml等各種技術配置的原始文件,以"_blank"命名結尾。包括:
          (1)jdbc_blank:連接MySQL的JDBC驅動程序,及數據庫連接測試jsp代碼;
          (2)struts_blank:構建Struts環境的jar、tld、xml文件;
          (3)struts2_blank:構建Struts2環境的jar、tld、xml文件;
          (4)log4j_blank:構建Log4j環境的jar、properties文件;
          (5)sitemesh_blank:構建Sitemesh環境的jar、tld、xml及裝飾文件樣例;
          (6)dbcp_blank:構建DBCP環境的jar文件,及struts-config.xml連接樣例;
          (7)hibernate_blank:構建Hibernate環境的jar文件,及配置文件hibernate.cfg.xml、管理類文件HibernateSessionFactory.java;
          (8)junit_blank:構建Junit環境的jar文件;
          (9)spring_blank:構建Spring環境的jar、tld、xml文件;

          在本書的案例構建過程中,將會明確說明從以上的原始目錄進行環境的搭建。

          2.source目錄

          該目錄下包含了本書開發的所有架構原型程序包、系統及數據庫。該目錄下包含了三部分源代碼:

          首先是四個入門樣例源代碼:
          (1)StrutsTest.zip:Struts快速入門樣例
          (2)HibernateTest.zip:Hibernate快速入門樣例
          (3)SpringTest.zip:Spring快速入門樣例
          (4)Struts2Test.zip:Struts2快速入門樣例

          下面為十個軟件架構原型源程序包,命名中的技術是相應架構的構建技術:
          (1)demo(JSP).zip
          (2)demo(JSP+JavaBean).zip
          (3)demo(JSP+JavaBean+Servlet).zip
          (4)demo(Struts).zip
          (5)demo(Struts+Hibernate).zip
          (6)demo(Spring).zip
          (7)demo(Sprint+Hibernate).zip
          (8)demo(Struts+Spring).zip
          (9)demo(Struts+Spring+Hibernate).zip
          (10)demo(Struts2+Spring+Hibernate).zip

          下面為開發的系統源代碼:
          (1)demo_ssh_address.zip:基于Struts+Spring+Hibernate的個人通訊錄系統
          (2)demo_ssh_oa.zip:基于Struts+Spring+Hibernate的辦公自動化系統
          (3)demo_ssh2_oa.zip:基于Struts2+Spring+Hibernate的辦公自動化系統

          另外,database.zip為上面的系統所使用的MySQL數據庫文件及其建表SQL。

          提示:source目錄中共提供了4個入門樣例、10個架構原型包、3個OA程序包,并包含數據庫的腳本database.zip。讀者在按照1.4節配置好MTEC的開發環境后,可以使用下面的方法運行這17個程序:首先將要運行的程序包解壓縮到Eclipse的工作目錄(如D:\eclipse\workspace),單擊Eclipse左側的項目工作區空白處,單擊鼠標右鍵,在彈出的右鍵菜單中選擇"導入",然后在彈出的導入窗口中選擇"從現有項目到工作空間中",并選擇剛才解壓縮后的程序目錄,單擊"確定"即可導入到Eclipse中。

          posted @ 2009-04-06 12:03 胡鵬 閱讀(1371) | 評論 (0)編輯 收藏

          hibernate 二級緩存:(緩存的是實體對象,二級緩存是放變化不是很大的數據)








          二級緩存也稱進程級的緩存或SessionFactory級的緩存,而二級緩存可以被所有的session(hibernate中的)共享二級緩存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二級緩存

           

          二級緩存的配置和使用:

          1.將echcache.xml文件拷貝到src下, 二級緩存hibernate默認是開啟的,手動開啟

          2.開啟二級緩存,修改hibernate.cfg.xml文件,

          <property name=”hibernate.cache.user_second_level_cache”>true</property>

          3.指定緩存產品提供商

          <property name=”hibernate.cache.provider_calss”>org.hibernate.cache.EhCacheProvider</property>

           

          4.指定那些實體類使用二級緩存(兩種方法,推薦使用第二種)

          第一種:在*.hbm.xml中,在<id>之前加入

          <cache usage=”read-only” />, 使用二級緩存

          第二種:在hibernate.cfg.xml配置文件中,在<mapping resource=”com/Studnet.hbm.xml” />后面加上:

          <class-cache class=” com.Studnet” usage=”read-only” /> 

           

          二級緩存是緩存實體對象的

          了解一級緩存和二級緩存的交互

           

           

           

           

          測試二級緩存:

          一.開啟兩個session中發出兩次load查詢(getload一樣,同樣不會查詢數據庫),

          Student sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          sessioin.close();

          ………..

                 sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          開啟兩個session中發出兩次load查詢,第一次load的時候不會去查詢數據庫,因為他是LAZY的,當使用的時候才去查詢數據庫,  第二次load的時候也不會,當使用的時候查詢數據庫,開啟了二級緩存,也不會查詢數據庫。

           

           

          二.開啟兩個session,分別調用load,再使用sessionFactory清楚二級緩存

          Student sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          sessioin.close();

          ………..

          SessionFactory factory = HibernateUtil.getSessionFactory();

          //factory.evict(Student.class); //清除所有Student對象

          Factory.evict(Student.class,1); //清除指定id=1 的對象

           

                 sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          開啟兩個session中發出兩次load查詢,第一次load的時候不會去查詢數據庫,因為他是LAZY的,當使用的時候才去查詢數據庫,  第二次load的時候也不會,當使用的時候查詢數據庫,它要查詢數據庫,因為二級緩存中被清除了

           

          三.一級緩存和二級緩存的交互

           

          session.setCacheMode(CacheMode.GET);    //設置成 只是從二級緩存里讀,不向二級緩存里寫數據

          Student sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          sessioin.close();

          ………..

          SessionFactory factory = HibernateUtil.getSessionFactory();

          //factory.evict(Student.class); //清除所有Student對象

          Factory.evict(Student.class,1); //清除指定id=1 的對象

           

                 sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          開啟兩個session中發出兩次load查詢,第一次load的時候不會去查詢數據庫,因為他是LAZY的,當使用的時候才去查詢數據庫,  第二次load的時候也不會,當使用的時候查詢數據庫,它要查詢數據庫,因為 設置了CacheMode為GET,(load設置成不能往二級緩沖中寫數據), 所以二級緩沖中沒有數據

           

           

           

          session.setCacheMode(CacheMode.PUT);  //設置成只是向二級緩存里寫數據,不讀數據

          Student sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          sessioin.close();

          ………..

          SessionFactory factory = HibernateUtil.getSessionFactory();

          //factory.evict(Student.class); //清除所有Student對象

          Factory.evict(Student.class,1); //清除指定id=1 的對象

           

                 sutdent = (Student)session.load(Student.class,1);

                 System.out.println(student.getName());

          開啟兩個session中發出兩次load查詢,第一次load的時候不會去查詢數據庫,因為他是LAZY的,當使用的時候才去查詢數據庫,  第二次load的時候也不會,當使用的時候查詢數據庫,它要查詢數據庫,因為設置了CacheMode為POST,(load設置成只是向二級緩存里寫數據,不讀數據)

           

          posted @ 2009-04-06 12:02 胡鵬 閱讀(813) | 評論 (0)編輯 收藏
          僅列出標題
          共10頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 

          導航

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南城县| 滨州市| 铜鼓县| 昭平县| 普宁市| 乳源| 广昌县| 南昌县| 谷城县| 黄陵县| 楚雄市| 灯塔市| 永安市| 德格县| 凌云县| 临澧县| 陆丰市| 罗山县| 卢龙县| 聂荣县| 蒙阴县| 砀山县| 贡山| 岐山县| 福鼎市| 迭部县| 厦门市| 大关县| 津南区| 林口县| 织金县| 博湖县| 阿城市| 常熟市| 滁州市| 邵东县| 泰安市| 普陀区| 绥中县| 柳林县| 河东区|