Hibernate進階之緩存

首先,我們這裏需要講一下什麼時緩存以及我們爲什麼要使用緩存

一、什麼是緩存:
1.緩存是指爲了降低應用程序對物理數據源訪問的頻次從而提高應用程序的運行性能的一種策略。

二、爲什麼使用緩存:
1.ORM框架訪問數據庫的效率直接影響應用程序的運行速度,提升和優化ORM框架的執行效率至關重要。
2.Hibernate的緩存是提升和優化Hibernate執行效率的重要手段,所以學會Hibernate緩存的使用和配置是優化的關鍵。
3.評判一個ORM框架是否優秀,訪問數據庫的頻次就一個重要的標準。

其次,在Hibernate中存在着一級緩存以及二級緩存。對於一級緩存也叫session級別的緩存,一級緩存是將我們重複的數據緩存在同一個session中減少對數據庫的訪問,Hibernate框架是默認開啓一級緩存的,我們在使用的時候就能體現出一級緩存的作用。在本篇博客我們重點來說下二級緩存(應用級別的緩存)。


二級緩存的作用是什麼?它是將我們重複查詢的數據的緩存區域擴大到不同的session中,以達到應用級別的緩存,二級緩存Hibernate框架是默認不開啓的並且需要第三方的緩存框架去實現二級緩存的實現,在此我們用的是ehcache來實現二級緩存。好,接下來我們就來實現一下。


1.在pom.xml中寫入相關的依賴(沒有使用maven的小夥伴可以直接將需要的jar包導入工程,是一樣的操作)

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>

<!-- hibernate所需的依賴 -->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-core</artifactId>
	<version>4.2.4.Final</version>
</dependency>

<!-- 數據庫驅動包 -->
<dependency>
	<groupId>com.oracle</groupId>
	<artifactId>oracle_driver</artifactId>
	<version>oracle11g</version>
</dependency>

<!-- 二級緩存 -->
<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache-core</artifactId>
	<version>2.4.3</version>
</dependency>

<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-ehcache</artifactId>
	<version>4.2.5.Final</version>
</dependency>

2.我們依舊沿用之前的實體類以及配置文件,需要對cfg以及需要緩存的實體類的hbm增加以下配置

cfg文件

<!-- 配置二級緩存 -->  
<property name="hibernate.cache.use_second_level_cache">true</property>  
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>  
<!-- 開啓查詢緩存 -->  
<property name="hibernate.cache.use_query_cache">true</property> 


hbm文件,在class標籤裏配置

<!-- 開啓二級緩存 
    	usage事務模式
    	include non-lazy 不緩存延遲加載的屬性,跟其他實體相關聯的屬性
    	region 可以在encache.xml中去特意的配置該緩存策略
-->
<cache usage="read-only" include="all" />


3.編寫測試類

package com.yc.test;

import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.yc.entity.Employee;
import com.yc.utils.HibernateUtil;

public class MyTestTwoCache {
	private Session session;

	@Before
	public void init(){
		session=HibernateUtil.getSession();
	}

	@After
	public void destory(){
		HibernateUtil.closeSession(session);
	}
	
	@Test
	public void testCache(){
		Employee e1=(Employee) session.get(Employee.class, 1000);
		System.out.println(e1);
		System.out.println("==我==是==分==割==線==");
		session=HibernateUtil.getSession();
		e1=(Employee) session.get(Employee.class, 1000);
		System.out.println(e1);
	}
}


爲了證實二級緩存的作用,我們先將hbm配置文件中的cache標籤註釋來運行一下,即沒有使用二級緩存的情況


我們會發現對於相同的數據,在不同的session中發送了兩次sql語句,這不是我們想要的結果。將hbm文件中的cache標籤註釋去掉,即開啓我們的二級緩存再來運行測試一下



OK,我們發現這次並沒有第二條sql語句出現,二級緩存配置成功!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章