温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何配置Hibernate二级缓存

发布时间:2021-11-17 17:50:22 来源:亿速云 阅读:173 作者:小新 栏目:编程语言

小编给大家分享一下如何配置Hibernate二级缓存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Hibernate有很多值得学习的地方,这里我们主要介绍配置Hibernate二级缓存,包括介绍在Spring托管的Hibernate二级缓存等方面。

使用EhCache配置Hibernate二级缓存:

配置Hibernatee二级缓存准备:

1)把ehcache-1.2.3.jar加入到当前应用的classpath中。

2)在hibernate.cfg.xml文件中加入EhCache缓存插件的提供类。

<property name="hibernate.cache.provider_class">     org.hibernate.cache.EhCacheProvider     </property>

3)挎贝ehcache.xml文件到类路径(项目工程的src目录下),这个文件在Hibernate安装目录的etc下。

<?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="org.qiujy.domain.cachedemo.Category" table="categories">  //配置缓存,必须紧跟在class元素后面对缓存中的Category对象采用读写型的并发访问策略   <cache usage="read-write"/>  <id name="id" type="java.lang.Long"> <column name="id" /> <generator class="native" /> </id> <!-- 配置版本号,必须紧跟在id元素后面 --> <version name="version" column="version" type="java.lang.Long" />  <property name="name" type="java.lang.String"> <column name="name" length="32" not-null="true"/> </property>  <property name="description" type="java.lang.String"> <column name="description" length="255"/> </property>  <set name="products" table="products" cascade="all" inverse="true">  <cache usage="read-write"/>  <key column="categoryId" not-null="true"/> <one-to-many class="org.qiujy.domain.cachedemo.Product"/> </set>  </class> </hibernate-mapping>

Product.hbm.xml

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="org.qiujy.domain.cachedemo.Product" table="products">  <cache usage="read-write"/>  <id name="id" type="java.lang.Long"> <column name="id" /> <generator class="native" /> </id> <!-- 配置版本号,必须紧跟在id元素后面 --> <version name="version" column="version" type="java.lang.Long" />  <property name="name" type="java.lang.String"> <column name="name" length="32" not-null="true"/> </property>  <property name="description" type="java.lang.String"> <column name="description" length="255"/> </property>  <property name="unitCost" type="java.lang.Double"> <column name="unitCost" /> </property>  <property name="pubTime" type="java.util.Date"> <column name="pubTime" not-null="true" /> </property>  <many-to-one name="category" column="categoryId" class="org.qiujy.domain.cachedemo.Category" cascade="save-update" not-null="true"> </many-to-one>  </class> </hibernate-mapping>

编辑ehcache.xml文件:

<ehcache> <diskStore path="c:\\ehcache\"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"   />  <!-- 设置Category类的缓存的数据过期策略 --> <cache name="org.qiujy.domain.cachedemo.Category" maxElementsInMemory="100" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" />  <!-- 设置Category类的products集合的缓存的数据过期策略 --> <cache name="org.qiujy.domain.cachedemo.Category.products" maxElementsInMemory="500" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" />  <cache name="org.qiujy.domain.cachedemo.Product" maxElementsInMemory="500" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" />  </ehcache>

在Spring托管的Hibernate二级缓存
1.在spring的配置文件中,hibernate部分加入 xml 代码 org.hibernate.cache.EhCacheProvider true
2.为HBM表设置cache策略 xml 代码
3.在DAO中,调用find方法查询之前,设置使用缓存 Java代码 getHibernateTemplate().setCacheQueries(true);

补充: 如果不设置“查询缓存”,那么Hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置 hibernate.cache.use_query_cache true 才行。

以上是“如何配置Hibernate二级缓存”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI