hibernate缓存

一.hibernate有一级缓存,二级缓存,和查询缓存。其中一二级缓存都是用来缓存对象,查询缓存是用来缓存属性。

一级

1.一级缓存的数据结构是Map,用于存储查询实体。Map的key存放实体的Id,Map的value存放实体本身。所以一级缓存无法存储查询的属性。
2.一级缓存的生命周期与Session有关,Session产生一级缓存创建,Session关闭一级缓存销毁
3.Get,Load,Iterator方法读写一级缓存,List方法只写不读一级缓存
4.一级缓存不能禁用,但可以通过Session的clear方法 (清除所有)和evict方法 (指定类清除)清理一级缓存,从而达到禁止写缓存的效果
5.Session的save方法会写 (一级)缓存,在批量插入数据时要注意对一级缓存做定时清理。Hibernate的批量处理效率不高,建议使用Session.connection()或得Jdbc连接后使用Jdbc的相关API做批处理操作
二级

1.二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享。
2.二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。
3.Hibernate默认情况下是打开的,提供一个Hashtable存储二级缓存,但只适用于研发,开发中为第三方缓存组件提供了接入接口,我们可以根据不同情况选择不同的实现。
4.二级缓存也只能缓存实体对象,不缓存属性。
5.可以通过session.setCacheMode()  CacheMode.PUTCacheMode.GETCacheMode.NORMAL来设置二级缓存
6.ehcache二级缓存的配置和使用:

  * 将echcache.xml文件拷贝到src下

  * 开启二级缓存,修改hibernate.cfg.xml文件

  true

  * 指定缓存产品提供商,修改hibernate.cfg.xml文件

  org.hibernate.cache.EhCacheProvider

  * 指定那些实体类使用二级缓存(两种方法)

  * 在映射文件中采用标签

  * 在hibernate.cfg.xml文件中,采用标签

如:

[html]  view plain copy
  1. <hibernate-configuration>  
  2.     <session-factory>  
  3.     <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orclproperty>   
  4.     <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriverproperty>   
  5.     <property name="hibernate.connection.username">scottproperty>   
  6.     <property name="hibernate.connection.password">tigerproperty>   
  7.     <property name="hibernate.dialect">org.hibernate.dialect.OracleDialectproperty>  
  8.     <property name="format_sql">trueproperty>  
  9.     <property name="show_sql">trueproperty>  
  10.     <property name="hibernate.cache.use_second_level_cache">trueproperty>  
  11.     <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProviderproperty>    
  12.     <mapping resource="com/pk/po/Person.hbm.xml"/>  
  13.     <class-cache usage="read-only" class="com.pk.po.Person"/>   
  14.     session-factory>  

你可能感兴趣的:(java学习笔记,hibernate缓存)