沉睡森林@漂在北京
本处文章除注明“转载”外均为原创,转载请注明出处。
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
152 随笔 :: 4 文章 :: 114 评论 :: 0 Trackbacks
<
2010年3月
>
日
一
二
三
四
五
六
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
随笔分类
(115)
DataBase(15)
(rss)
Digester(4)
(rss)
Eclipse(1)
(rss)
Ext(29)
(rss)
jQuery(7)
(rss)
Other(28)
(rss)
Spring(19)
(rss)
Ubuntu(6)
(rss)
WebService(2)
(rss)
Workflow(4)
(rss)
随笔档案
(154)
2012年6月 (1)
2012年4月 (5)
2012年3月 (3)
2010年7月 (1)
2010年6月 (6)
2010年5月 (4)
2010年4月 (2)
2010年3月 (13)
2010年2月 (3)
2010年1月 (16)
2009年12月 (1)
2009年11月 (3)
2009年10月 (3)
2009年9月 (2)
2009年8月 (3)
2009年7月 (4)
2009年6月 (10)
2009年5月 (15)
2009年4月 (3)
2009年3月 (12)
2009年2月 (6)
2008年12月 (6)
2008年11月 (11)
2008年10月 (21)
技术blog
B/S开发
Cat in dotNET
java&maven2
JAVA之道
OOPAA
Ruby's Louvre
xmatthew
万事大吉的IT学习笔记
从嘉陵到钱塘
开发者的最佳实践
成吉的个人网站
薛敬明的专栏
ext方面很多实用的文章
搜索
最新评论
1. re: 利用axis2的wsdl2java生成webservice的客户端代码[未登录]
1
--1
2. re: SpringMVC下的权限控制
45
--sad
3. re: SpringMVC下的权限控制
发的更好地发挥到发货
--才不会
4. re: 关于oracle中varchar2的最大长度
你太给力了!果断顶起!!
--荒漠依米
5. re: 关于oracle中varchar2的最大长度
afa
--sdf
Hibernate+ehcache二级缓存技术
1、首先设置EhCache,建立配置文件ehcache.XML,默认的位置在class-path,可以放到你的src目录下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="Java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000" <!-- 缓存最大数目 -->
eternal="false" <!-- 缓存是否持久 -->
overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->
timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->
timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->
diskPersistent="false"
diskExpiryThreadIntervalSeconds= "120"/>
</ehcache>
2、在Hibernate配置文件中设置:
<!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<!-- 是否使用查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
如果使用spring调用Hibernate的sessionFactory的话,这样设置:
<!--HibernateSession工厂管理 -->
<bean id="sessionFactory"
class="org.springFramework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="datasource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
</props>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>/Web-INF/classes/cn/rmic/manager/hibernate/</value>
</list>
</property>
</bean>
说明一下:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置hibernate.cache.use_query_cache true才行。
3、在Hbm文件中添加<cache usage="read-only"/>
4、如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性
5、实践出真知,给一段测试程序,如果成功的话第二次查询时不会读取数据库
package cn.rmic.hibernatesample;
import java.util.List;
import org.hibernate.CacheMode;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;
import cn.rmic.manager.po.Resources;
public class testCacheSelectList
{
/** *//**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Session s=HibernateSessionFactory.getSession();
Criteria c=s.createCriteria(Resources.class);
c.setCacheable(true);
List l=c.list();
// Query q=s.createQuery("From Resources r")
// .setCacheable(true)
// .setCacheRegion("frontpages") ;
// List l=q.list();
Resources resources=(Resources)l.get(0);
System.out.println("-1-"+resources.getName());
HibernateSessionFactory.closeSession();
try
{
Thread.sleep(5000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
s=HibernateSessionFactory.getSession();
c=s.createCriteria(Resources.class);
c.setCacheable(true);
l=c.list();
// q=s.createQuery("From Resources r").setCacheable(true)
// .setCacheRegion("frontpages");
// l=q.list();
resources=(Resources)l.get(0);
System.out.println("-2-"+resources.getName());
HibernateSessionFactory.closeSession();
}
}
posted on 2010-03-14 17:45
王总兵
阅读(179)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 王总兵