Hibernate框架是现在主流的数据持久层框架,其强大的功能是不言而喻的,是很多其他类似框架所不能比拟的。我之前也研究过mybatis框架,并且使用了它开发过个一个项目,他主要的优势是他的灵活性,只需注重sql语句的编写,具体实现交给框架执行。学他上手快,但不是最好的选择。性能是比不上Hibernate的,Hibernate具有数据库无关性,不需要很强的sql语句编写能力,还有其强大的缓存技术,学习的话这是首选。言归正传,我们看下它的缓存策略的配置。
必须引入相应的jar包--(ehcache-core-2.4.3.jar、hibernate-ehcache-4.2.2.Final.jar)
在配置sessionFactroy的时候配置缓存策略参数:
<property name="hibernateProperties">
<props>
<!-- 指定数据库方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!--指定数据库方言-->
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop><!--provider缓存策略-->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="format_sql">true</prop>
</props>
</property>
仅仅这样配置是不行的 它会报找不到ehcache.xml文件 因为配置了缓存策略后但启动服务加载bean的是会默认加载这个配置文件
看看ehcache.xml的配置吧 该文件是在classpath下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!-- 注:
maxElementsInMemory为缓存对象的最大数目, eternal设置是否永远不过期 (这个最好不要设置成true 那样可能会造成内存溢出)
timeToIdleSeconds对象处于空闲状态的最多秒数 timeToLiveSeconds对象处于缓存状态的最多秒数 (s)
-->
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" />
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300"
timeToLiveSeconds="4200" overflowToDisk="true" />
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="5000" eternal="true" timeToIdleSeconds="0"
timeToLiveSeconds="0" overflowToDisk="false" />
</ehcache>
缓存技术要慎用 更多缓存配置参数和使用请再看相关文档。