1.配置hbm.xml
在class节点下面添加 <cache usage="read-write"/>(读写) 或者 <cache usage="read-only"/>(只读)
如:
<class name="com.hxy.portal.poststext.JforumPostsText" table="jforum_posts_text" catalog="jforum_bbs">
<cache usage="read-write"/>
<id name="postId" type="java.lang.Integer">
<column name="post_id" />
<generator class="identity" />
</id>
<property name="postText" type="java.lang.String">
<column name="post_text" length="65535" />
</property>
.....
</class>
2.配置spring文件
//打开hibernate二级缓存
hibernate.cache.use_sencond_levl_cache=true
//设置缓存加载类
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
//设置查询缓存
hibernate.cache.use_query_cache=true
具体配置:
<bean id="sf_id"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<value>
<!-- 配置hibernate属性 如第一个方言等-->
<!--
1.hibernate.dialect Hibernate SQL方言 表示连接那种数据库
2.hibernate.query.substitutions
你可以使用hibernate.query.substitutions定义新的Hibernate查询短语。比如说:
hibernate.query.substitutions true 1, false 0
这个配置意思是当你在Hibernate里面输入true的时候,Hibernate会转化为1插入数据库,
当你在Hibernate里面输入false的时候,Hibernate会转化为0插入数据库,后面的Y,N同理。
对于某些数据库,例如Oracle来说,没有boolean数据类型,就是采用1代表true,0代表false,
因此使用这个配置在Hibernate里面直接用true/false会非常直观。
hibernate.query.substitutions toLowercase=LOWER
这可以让你重新命名SQL的LOWER函数。
3.hibernate.jdbc.batch_size 一个非零值,会开启Hibernate使用JDBC2的批量更新功能取值. 建议值在 5 和 30之间。
4.hibernate.cache.provider_class 指定一个自定义的CacheProvider缓存提供者的类名.取值. classname.of.CacheProvider
5.hibernate.cache.provider_configuration_file_resource_path hibernate缓存文件路径
6.hibernate.cache.use_sencond_levl_cache打开hibernate二级缓存
7.update如果数据库中不存在表则生成,存在如果有增加自动增加,开发使用update,生产一般不设置
-->
hibernate.hbm2ddl.auto
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.query.substitutions=true 1, false 0
hibernate.jdbc.batch_size=20
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.cache.use_sencond_levl_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true
</value>
<!-- hibernate.cache.provider_configuration_file_resource_path
指定缓存文件路径和文件名
-->
</property>
<!-- hibernate配置文件所在地 便于spring加载hibernate配置文件 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/hxy/portal/hibernate</value>
</list>
</property>
</bean>
3.编写ehcache.xml 配置文件
<ehcache>
<!-- maxElementsInMemory="10000" 缓存中最大允许创建的对象数 -->
<!-- eternal="false" 缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期 -->
<!-- timeToIdleSeconds="120" 缓存数据钝化时间(设置对象在它过期之前的空闲时间) -->
<!-- timeToLiveSeconds="120" 缓存数据的生存时间(设置对象在它过期之前的生存时间) -->
<!-- overflowToDisk="true" 内存不足时,是否启用磁盘缓存 -->
<diskStore path="c:\\ehcache\"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
</ehcache>
4.使用查询方法
/****
* 根据hql查询List
*/
public List findCacheListByHql(final String hql) {
// TODO Auto-generated method stub
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// TODO Auto-generated method stub
Query queryObject = session.createQuery(hql);
//设置是否启用缓存
queryObject.setCacheable(true);
if(getHibernateTemplate().getQueryCacheRegion() != null){
queryObject.setCacheRegion(getHibernateTemplate().getQueryCacheRegion());
}
return queryObject.list();
}
});
}
5.缓存仅仅对hql查询生效,如果使用sql更变数据库数据,缓存数据将不会修改,只用使用hql操作数据库才能同步修改缓存数据。
如有疑问,欢迎加入群:283948248 找群主
分享到:
相关推荐
传播智客,为Spring集成的Hibernate配置二级缓存、cache.xml
为Spring集成的Hibernate配置二级缓存
主要讲解hibernate缓存的配置和和使用方法,以及一级缓存和二级缓存的定义和区别,和查询缓存的使用
文档中说明了Hibernate二级缓存的事务范围、进程范围、集群范围的缓存配置。主要针对进程范围EhCacheProvider进行讲解,及查询缓存的讲解。
学习hibernate的必备,提供一个简易的流程图,方便记忆和查找
基于springboot最新版本2.1.4.RELEASE,采用jpa为dao层框架,配置redis(redisson)为hibernate的二级缓存。
NULL 博文链接:https://364232252.iteye.com/blog/2369161
此配置和包,是springMVC4.3.3 +spring4+hibernate5.1.3+二级缓存ehcache(不用可以关闭)+fastjson。 是正常运行的项目里拷出来的,方便大家使用。
本人在做项目时用到了Hibernate的二级缓存,使用的是EhCache,结合本人自己的理解总结了如何在java web项目中配合Hibernate使用二级缓存,以提高程序的性能,附带需要的文件,参考的文件,和测试类以及说明。
hibernate5.1二级缓存包
Hibernate二级缓存 在一个数据库系统中,如果缓存设置的合适,那么可以极大的提高系统的效率,Hibernate作为一个ORM工具 提供了缓存的机制,包括一级(Session级)缓存和二级(SessionFactory级)缓存。这里主要...
-- 查询的二级缓存配置 --> <property name="hibernate.cache.use_query_cache">true <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider 4.0配置如下: <property name="hibernate...
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行... Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存
hibernate4配置ehcache二级缓存,以及相关的jar都在源码中。
Hibernate二级缓存架包及相应配置文件
Hibernate EhCache 二级缓存配置
一对一映射 hibernate优化配置一级二级缓存步骤 有图有真相
Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,和元素都有一个子元素,这个子元素用来配置二级缓存。 示例:以category(产品类别)和product(产品)的映射为例: 1) 修改要配置缓存的那个持久化类的...