hibernate--day04筆記_第1頁
hibernate--day04筆記_第2頁
hibernate--day04筆記_第3頁
hibernate--day04筆記_第4頁
hibernate--day04筆記_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 整合log4j(了解)l slf4j 核心jar : slf4j-api-1.6.1.jar 。slf4j是日志框架,將其他優(yōu)秀的日志第三方進(jìn)行整合。l 整合導(dǎo)入jar包log4j 核心包:log4j-1.2.17.jar過渡jar(整合jar):slf4j-log4j12-1.7.5.jarl 導(dǎo)入配置文件perties ,此配置文件通知log4j 如何輸出日志l 配置文件內(nèi)容:1.記錄器2.輸出源3.布局l 記錄器例如: log4j.rootLogger=info, stdout,file格式:log4j.rootLogger=日志級別, 輸出源1,輸出源2,。log

2、4j 日志級別 : fatal 致命錯(cuò)誤 error 錯(cuò)誤 warn 警告 info 信息 debug 調(diào)試信息 trace 堆棧信息 (由高到底順序)l 輸出源:例如:log4j.appender.file=org.apache.log4j.FileAppender格式:log4j.appender.輸出源的名稱=輸出源的實(shí)現(xiàn)類名稱:自定義實(shí)現(xiàn)類:log4j提供輸出源屬性例如:log4j.appender.file.File=d:mylog.log輸出源屬性格式:log4j.appender.名稱.屬性=值每一個(gè)輸出源對應(yīng)一個(gè)實(shí)現(xiàn)類,實(shí)現(xiàn)類都屬性(setter),底層執(zhí)行setter方法進(jìn)行

3、賦值l 常見的輸出源實(shí)現(xiàn)類org.apache.log4j.FileAppender 輸出文件中file ,表示文件輸出位置org.apache.log4j.ConsoleAppender 輸出到控制臺Target ,表示使用哪種輸出方式,在控制臺打印內(nèi)容,取值:System.out / System.errl 布局 - 確定輸出格式例如:log4j.appender.stdout.layout=org.apache.log4j.PatternLayout格式:log4j.appender.數(shù)據(jù)源.layout=org.apache.log4j.PatternLayout布局屬性:log4j.

4、appender. 數(shù)據(jù)源.layout.ConversionPattern=值12:56:30,123 info l 擴(kuò)展:對指定的目錄設(shè)置日志級別例如:.hibernate.transaction=debug格式:log4j.logger.包結(jié)構(gòu)=級別2 一對一(了解)l 情況1:主表的主鍵,與從表的外鍵(唯一),形成主外鍵關(guān)系l 情況2:主表的主鍵,與從表的主鍵,形成主外鍵關(guān)系 (從表的主鍵又是外鍵)2.1.1 情況12.1.2 情況23 二級緩存【掌握】3.1 介紹3.1.1 緩存緩存(Cache): 計(jì)算機(jī)領(lǐng)域非常通用的概念。它介于應(yīng)用程序和永久性數(shù)據(jù)

5、存儲源(如硬盤上的文件或者數(shù)據(jù)庫)之間,其作用是降低應(yīng)用程序直接讀寫硬盤(永久性數(shù)據(jù)存儲源)的頻率,從而提高應(yīng)用的運(yùn)行性能。緩存中的數(shù)據(jù)是數(shù)據(jù)存儲源中數(shù)據(jù)的拷貝。緩存的物理介質(zhì)通常是內(nèi)存緩存:程序<-(內(nèi)存)->硬盤3.1.2 什么是二級緩存l hibernate 提供緩存機(jī)制:一級緩存、二級緩存一級緩存:session級別緩存,在一次請求中共享數(shù)據(jù)。二級緩存:sessionFactory級別緩存,整個(gè)應(yīng)用程序共享一個(gè)會話工廠,共享一個(gè)二級緩存。l SessionFactory的緩存兩部分:內(nèi)置緩存:使用一個(gè)Map,用于存放配置信息,預(yù)定義HQL語句等,提供給Hibernate框架

6、自己使用,對外只讀的。不能操作。外置緩存:使用另一個(gè)Map,用于存放用戶自定義數(shù)據(jù)。默認(rèn)不開啟。外置緩存hibernate只提供規(guī)范(接口),需要第三方實(shí)現(xiàn)類。外置緩存有成為二級緩存。3.1.3 二級緩存內(nèi)部結(jié)構(gòu)l 二級就是由4部分構(gòu)成n 類級別緩存n 集合級別緩存n 時(shí)間戳緩存n 查詢緩存(二級緩存的第2大部分,三級緩存)3.1.4 并發(fā)訪問策略l 訪問策略:讀寫型(read-write)、只讀型(read-only)3.1.5 應(yīng)用場景l(fā) 適合放入二級緩存中的數(shù)據(jù):很少被修改不是很重要的數(shù)據(jù), 允許出現(xiàn)偶爾的并發(fā)問題l 不適合放入二級緩存中的數(shù)據(jù):經(jīng)常被修改財(cái)務(wù)數(shù)據(jù), 絕對不允許出現(xiàn)并發(fā)問

7、題與其他應(yīng)用數(shù)據(jù)共享的數(shù)據(jù)3.1.6 二級緩存提供商l EHCache: 可作為進(jìn)程(單機(jī))范圍內(nèi)的緩存, 存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤, 對 Hibernate 的查詢緩存提供了支持。-支持集群。l OpenSymphony :可作為進(jìn)程范圍內(nèi)的緩存, 存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤, 提供了豐富的緩存數(shù)據(jù)過期策略, 對 Hibernate 的查詢緩存提供了支持l SwarmCache: 可作為集群范圍內(nèi)的緩存, 但不支持 Hibernate 的查詢緩存l JBossCache:可作為集群范圍內(nèi)的緩存, 支持 Hibernate 的查詢緩存X表示支持3.2 配置(操作)1.導(dǎo)入ja

8、r包:ehcache-1.5.0.jar/ commons-logging.jar/ backport-util-concurrent.jar2.開啟二級緩存(我要使用二級緩存)3.確定二級緩存提供商(我要使用哪個(gè)二級緩存)4.確定需要緩存內(nèi)容1>配置需要緩存的類2>配置需要緩存的集合5.配置ehcache自定義配置文件3.2.1 導(dǎo)入jar包3.2.2 開啟二級緩存l 在hibernate.cfg.xml 配置二級緩存<!- 9.1 開啟二級緩存 -><property name="hibernate.cache.use_second_level_ca

9、che">true</property>3.2.3 確定提供商l hibernate.cfg.xml 配置<!- 9.2 提供商 -><property name="vider_class">org.hibernate.cache.EhCacheProvider</property>3.2.4 確定緩存內(nèi)容l 在hibernate.cfg.xml 確定 類緩存 和集合緩存配置項(xiàng)l 配置<!- 9.3 確定緩存內(nèi)容 -><!- 類緩存 -><cl

10、ass-cache usage="read-write" class="com.itheima.a_init.Customer"/><class-cache usage="read-write" class="com.itheima.a_init.Order"/><!- 集合緩存 -><collection-cache usage="read-write" collection="com.itheima.a_init.Customer.orderSe

11、t"/>3.2.5 ehcache配置文件步驟1:從jar包復(fù)制xml文件步驟2:將xml重命名“ehcache.xml”步驟3:將修改后的xml,拷貝到src下3.3 演示3.3.1 證明Testpublic void demo01()/1 證明二級緩存存在 / * 修改toString()/ * 如果二級緩存開啟,查詢3 沒有select語句,表示從二級緩存獲得的。/ * 將二級緩存關(guān)閉,查詢3將觸發(fā)select語句。Session s1 = factory.openSession();s1.beginTransaction();/1 查詢id=1 - 執(zhí)行select (

12、查詢后,將數(shù)據(jù)存放在一級緩存,之后由一級緩存同步到二級緩存)Customer c1 = (Customer) s1.get(Customer.class, 1);System.out.println(c1);/2 查詢id=1 -從一級緩存獲取Customer c2 = (Customer) s1.get(Customer.class, 1);System.out.println(c2);s1.getTransaction().commit();s1.close();System.out.println("-");Session s2 = factory.openSessi

13、on();s2.beginTransaction();/3 查詢id=1 - 從二級緩存獲取Customer c3 = (Customer) s2.get(Customer.class, 1);System.out.println(c3);s2.getTransaction().commit();s2.close();3.3.2 類緩存l 類緩存:只存放數(shù)據(jù)l 一級緩存:存放對象本身Testpublic void demo02()/2 類緩存:只存放數(shù)據(jù),散裝數(shù)據(jù)。/ * 使用默認(rèn)的toString();Session s1 = factory.openSession();s1.beginTr

14、ansaction();/1 查詢id=1 - 執(zhí)行selectCustomer c1 = (Customer) s1.get(Customer.class, 1);System.out.println(c1);/2 查詢id=1 - 從一級緩存獲取,一級緩存存放對象本身Customer c2 = (Customer) s1.get(Customer.class, 1);System.out.println(c2);s1.getTransaction().commit();s1.close();System.out.println("-");Session s2 = fac

15、tory.openSession();s2.beginTransaction();/3 查詢id=1 - 對象不一樣,數(shù)據(jù)一樣Customer c3 = (Customer) s2.get(Customer.class, 1);System.out.println(c3);s2.getTransaction().commit();s2.close();3.3.3 集合緩存Testpublic void demo03()/3 集合緩存:只存放關(guān)聯(lián)對象OID的值,如果需要數(shù)據(jù),從類緩存中獲取。/ * 3.1 默認(rèn):第一條select 查詢客戶,第二天 select 查詢客戶所有訂單/ * 3.2

16、操作:在hibernate.cfg.xml 將 Order 類緩存刪除/ * <!- <class-cache usage="read-write" class="com.itheima.a_init.Order"/>->/ * 多了10條select,通過訂單的id查詢訂單Session s1 = factory.openSession();s1.beginTransaction();/1 查詢id=1 Customer c1 = (Customer) s1.get(Customer.class, 1);System.out.p

17、rintln(c1);/2 獲得訂單for (Order o1 : c1.getOrderSet() System.out.println(o1);s1.getTransaction().commit();s1.close();System.out.println("-");Session s2 = factory.openSession();s2.beginTransaction();/3 查詢id=1Customer c3 = (Customer) s2.get(Customer.class, 1);System.out.println(c3);/4 獲得訂單for (

18、Order o2 : c3.getOrderSet() System.out.println(o2);s2.getTransaction().commit();s2.close();3.3.4 時(shí)間戳l 時(shí)間戳:任何操作都在時(shí)間戳中記錄操作時(shí)間。Testpublic void demo04()/4 時(shí)間戳: 所有的操作都會在時(shí)間戳中進(jìn)行記錄,如果數(shù)據(jù)不一致,將觸發(fā)select語句進(jìn)行查詢/ * 修改toString()Session s1 = factory.openSession();s1.beginTransaction();/1 查詢id=1 Integer cid = 1;Custom

19、er c1 = (Customer) s1.get(Customer.class, cid);System.out.println(c1);/2 繞過一級和二級緩存,修改數(shù)據(jù)庫,修改客戶cname=大東哥s1.createQuery("update Customer set cname = ? where cid = ?").setString(0, "大東哥").setInteger(1, cid).executeUpdate();/3打印System.out.println(c1);s1.getTransaction().commit();s1.cl

20、ose();System.out.println("-");Session s2 = factory.openSession();s2.beginTransaction();/4 查詢id=1 - ?Customer c3 = (Customer) s2.get(Customer.class, 1);System.out.println(c3);s2.getTransaction().commit();s2.close();3.3.5 查詢緩存l 查詢緩存又稱為三級緩存(民間)l 查詢緩存默認(rèn)不使用。需要手動開啟l 查詢緩存:將HQL語句與 查詢結(jié)果進(jìn)行綁定。通過HQL相同

21、語句可以緩存內(nèi)容。默認(rèn)情況Query對象只將查詢結(jié)果存放在一級和二級緩存,不從一級或二級緩存獲取。查詢緩存就是讓Query可以從二級緩存獲得內(nèi)容。步驟一:開啟查詢緩存<!- 9.4 開啟查詢緩存 -><property name="hibernate.cache.use_query_cache">true</property>步驟二:在查詢query對象,設(shè)置緩存內(nèi)容(注意:存放和查詢 都需要設(shè)置)Testpublic void demo05()/5 查詢緩存Session s1 = factory.openSession();s1.be

22、ginTransaction();/1 query查詢Query q1 = s1.createQuery("from Customer");q1.setCacheable(true);List<Customer> a1 = q1.list();for (Customer c1 : a1) System.out.println(c1);/2 cid =1 - 一級緩存獲得Customer customer = (Customer) s1.get(Customer.class, 1);System.out.println(customer);s1.getTransa

23、ction().commit();s1.close();System.out.println("-");Session s2 = factory.openSession();s2.beginTransaction();/2 cid =1 - 二級緩存獲得Customer customer2 = (Customer) s2.get(Customer.class, 1);System.out.println(customer2);/3 query查詢Query q2 = s2.createQuery("from Customer");q2.setCachea

24、ble(true);List<Customer> a2 = q2.list();for (Customer c2 : a2) System.out.println(c2);s2.getTransaction().commit();s2.close();3.4 ehcache配置文件l <diskStore path="java.io.tmpdir"/> 設(shè)置臨時(shí)文件存放位置。(緩存一般內(nèi)存,一定程度時(shí),寫入硬盤。)l 緩存詳細(xì)設(shè)置<defaultCache> 所有的緩存對象默認(rèn)的配置<cache name="類"> 指定對象單獨(dú)配置l 參數(shù)設(shè)置maxElementsInMemory="10000" 內(nèi)存最大數(shù)eternal="false" 是否永久(內(nèi)存常駐留)timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true" 內(nèi)存滿了,是否寫入到硬盤maxElementsOnDisk="10000000" 硬盤最大數(shù)diskPersistent="false" 關(guān)閉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論