Hibernate的缓存

【存放对象实体】

一级缓存 会话(针对一个session,相当于一个线程 hibernate自带的,自动管理的):(生命周期在当前的会话(session),不同session属于不同会话)    Map

原理:查询的时候,首先会去缓存找,若缓存存在,则获取,若不存在,去数据库查询

 

1、第二次查询同一对象时,并没有再次执行数据库查询

2、在不同session中多次查询同一对象时,会执行多次数据库查询

3、一级缓存中,持久化类的每个 实例都具有唯一的OID


flush() 同步到数据库

evict(Object obj)  清除缓存中的object对象

clear() 清除中所有的持久化对象

Query.list() 不会使用缓存

Query.iterate() 使用缓存   (首先查出所有的Oid,根据Oid去缓存找,若缓存存在,则获取,若不存在,去数据库查询)


二级缓存 应用(所有session共有,ehcache,第三方的 需要配置开启):        HashTable


开启二级缓存需要针对特定一个类进行开启,

开启后,session1和session2.....将会共有 (即为session1和session2都执行查询同一个对象时候,只会发出一sql语句)

具有以下特征的数据可放入二级缓存中:

  1. 很少被修改的数据
  2. 不是很重要的数据,允许出现偶尔并发的数据
  3. 不会被并发访问的数据
  4. 参考数据


禁止一二级缓存交互:

在save方法前调用session.setCacheMode(CacheMode.IGNORE)。

【主要存放普通属性的数据,也可存放查询实体对象的id

查询缓存:

配置:

hibernate的查询缓存默认是关闭的,如果要使用就要到hibernate.cfg.xml文件里配置:

<property name="hibernate.cache.use_query_cache">true</property>

并且必须在程序中手动启用查询缓存,在query接口中的setCacheable(true)方法来启用。

除非是多次查询都是查询相同条件的数据,也就是说返回的结果总是一样,这样配置查询缓存才有意义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值