二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享,二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。Hibernate二级缓存也是缓存实体对象的,也叫Entity级二级缓存。
我认为二级缓存是对一级缓存的补充,还是get(),save(),load(),iterate(查询实体对象)方法支持二级缓存。无论list,load还是iterate,只要读出一个对象,都会填充缓存。list会向缓存中放入数据,而不利用缓存中的数据,而iterate会先取数据库select id出来,然后一个id一个id的load,如果在缓存里面有,就从缓存取,没有的话就去数据库load。 在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
配置二级缓存的详细步骤:
1、 加入jar包 ehcache.jar .
2、在应用中应用缓存,需要在hibernate.hbm.xml中配置,
3、加入 ehcache.xml文件配置缓存的参数。
4、设置持久化对象的缓存策略。
5、编辑测试类。
6、运行结果:
Hibernate:
select
card0_.ID as ID4_0_,
card0_.PERSON_ID as PERSON2_4_0_,
card0_.CARDNUMBER as CARDNUMBER4_0_
from
ZM.CARD card0_
where
card0_.ID=?
com.pojo.Card@1d2b01b
-------------------------------------------------------------------
false
com.pojo.Card@8ab708