分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Hibernate二级缓存

发布时间:2023-09-06 01:26责任编辑:沈小雨关键词:缓存Hibernate
 1 @org.junit.Test 2 ????public void testHibernateSecondLevelCache(){ 3 ????????Employee employee=(Employee) session.get(Employee.class, 7499); 4 ????????System.out.println(employee.getName()); 5 ?????????6 ????????transaction.commit(); 7 ????????session.close(); 8 ????????session = sessionFactory.openSession(); 9 ????????transaction = session.beginTransaction();10 ????????11 ????????Employee employee2=(Employee) session.get(Employee.class, 7499);12 ????????System.out.println(employee2.getName());13 ????}

现在这 这段代码就是两个session。会发送两条sql语句。

一:hibernate二级缓存应用

1:加入jar包

2:加入ehcache.xml

<ehcache> ???<!-- Sets the path to the directory where cache .data files are created. ????????If the path is a Java System Property it is replaced by ????????its value in the running VM. ????????The following properties are translated: ????????user.home - User‘s home directory ????????user.dir - User‘s current working directory ????????java.io.tmpdir - Default temp file path --> ???<diskStore path="java.io.tmpdir"/> ???<!--Default Cache configuration. These will applied to caches programmatically created through ???????the CacheManager. ???????The following attributes are required for defaultCache: ???????maxInMemory ??????- Sets the maximum number of objects that will be created in memory ???????eternal ??????????- Sets whether elements are eternal. If eternal, ?timeouts are ignored and the element ???????????????????????????is never expired. ???????timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used ???????????????????????????if the element is not eternal. Idle time is now - last accessed time ???????timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used ???????????????????????????if the element is not eternal. TTL is now - creation time ???????overflowToDisk ???- Sets whether elements can overflow to disk when the in-memory cache ???????????????????????????has reached the maxInMemory limit. ???????--> ???<defaultCache ???????maxElementsInMemory="10000" ???????eternal="false" ???????timeToIdleSeconds="120" ???????timeToLiveSeconds="120" ???????overflowToDisk="true" ???????/> ???<!--Predefined caches. ?Add your cache configuration settings here. ???????If you do not have a configuration for your cache a WARNING will be issued when the ???????CacheManager starts ???????The following attributes are required for defaultCache: ???????name ?????????????- Sets the name of the cache. This is used to identify the cache. It must be unique. ???????maxInMemory ??????- Sets the maximum number of objects that will be created in memory ???????eternal ??????????- Sets whether elements are eternal. If eternal, ?timeouts are ignored and the element ???????????????????????????is never expired. ???????timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used ???????????????????????????if the element is not eternal. Idle time is now - last accessed time ???????timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used ???????????????????????????if the element is not eternal. TTL is now - creation time ???????overflowToDisk ???- Sets whether elements can overflow to disk when the in-memory cache ???????????????????????????has reached the maxInMemory limit. ???????--> ???<!-- Sample cache named sampleCache1 ???????This cache contains a maximum in memory of 10000 elements, and will expire ???????an element if it is idle for more than 5 minutes and lives for more than ???????10 minutes. ???????If there are more than 10000 elements it will overflow to the ???????disk cache, which in this configuration will go to wherever java.io.tmp is ???????defined on your system. On a standard Linux system this will be /tmp" ???????--> ???<cache name="sampleCache1" ???????maxElementsInMemory="10000" ???????eternal="false" ???????timeToIdleSeconds="300" ???????timeToLiveSeconds="600" ???????overflowToDisk="true" ???????/> ???<!-- Sample cache named sampleCache2 ???????This cache contains 1000 elements. Elements will always be held in memory. ???????They are not expired. --> ???<cache name="sampleCache2" ???????maxElementsInMemory="1000" ???????eternal="true" ???????timeToIdleSeconds="0" ???????timeToLiveSeconds="0" ???????overflowToDisk="false" ???????/> --> ???<!-- Place configuration for your caches following --></ehcache>

3:在hibernate.cfg.xml文件中配置需要缓存的配置。

<!-- 配置启用hibernate的二级缓存 --> ???????<property name="cache.use_second_level_cache">true</property> ???????<!-- 配置hibernate二级缓存使用的产品 --> ???????<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> ???????<!-- 配置对哪些类使用 hibernate 的二级缓存 ?。在mapping的后面 --> ???????<class-cache usage="read-write" class="com.hq.entities.Employee"/>

或者在Employee的 hbm.xml文件中加上

<cache usage="read-write"/>

**:对集合进行二级缓存的配置:

     <class-cache usage="read-write" class="com.hq.entities.Employee"/> ???????<class-cache usage="read-write" class="com.hq.entities.Department"/> ???????<collection-cache usage="read-write" collection="com.hq.entities.Department.emps"/> 

或者在Department.hbm.xml和Employee.hbm.xml中加上

 <cache usage="read-write"/>

然后在集合中加上cache

<set name="emps" table="GG_EMP" inverse="true" lazy="true"> ???????????<cache usage="read-write"/> ???????????<key> ???????????????<column name="DEPT_ID" /> ???????????</key> ???????????<one-to-many class="com.hq.entities.Employee" /> ???????</set>

***.  查询缓存: 默认情况下, 设置的缓存对 HQL 及 QBC 查询时无效的, 但可以通过以下方式使其是有效的

I.  在 hibernate 配置文件中声明开启查询缓存

<property name="cache.use_query_cache">true</property>

II. 调用 Query 或 Criteria 的 setCacheable(true) 方法

III. 查询缓存依赖于二级缓存

Hibernate二级缓存

原文地址:http://www.cnblogs.com/bulrush/p/7881457.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved