前言
缓存:把数据存起来重复使用。
如何提高Hibernate效率?
1、join fetch 来进行即时填充,避免n+1次查询。
2、尽量使用批处理增删改。
3、对比较稳定的数据进行有效利用二级缓存,减少数据库的查询。
Hibernate:
一级缓存:session的开和关之间。
二级缓存:一直存在,全局的sessionFactory相同的生命周期。
实战
导入jar包,如有重复就留高版本去低版本。
配置Hibernate的二级缓存的开关,现在把它打开。
<!-- 二级缓存总开关 -->
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<!-- 开启查询缓存-->
<prop key="hibernate.cache.use_query_cache">true</prop>
<!-- 设置二级缓存插件EHCache的Provider类-->
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.cache.region.factory_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory
</prop>
编写二级缓存的配置
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!--如果缓存中的对象存储超过指定的缓存数量的对象存储的磁盘地址-->
<diskStore path="D:/ehcache"/>
<!-- 默认cache:如果没有对应的特定区域的缓存,就使用默认缓存 -->
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="false"/>
<!-- 指定区域cache:通过name指定,name对应到Hibernate中的区域名即可-->
<cache name="com.bdqn.it.entity.GoodType"
eternal="true"
maxElementsInMemory="1000"
timeToIdleSeconds="3600"
timeToLiveSeconds="21600"
overflowToDisk="true">
</cache>
</ehcache>
继续配置
这里的话,请设置到你们的方法中即可,小白这里的是父方法。各位可以在自己查询的方法里加即可。
本小白运行项目,点击某个功能第一次出现了查询语句。此时它已经被存储到二级缓存中。
这是第二次运行并点击功能发现已经没查询的SQL语句了说明这是从二级缓存取的数据。
如有不足,请多多指教。