`

hibernate 缓存 笔记

阅读更多

hibernate一级缓存

一级缓存生命周期很短,它session的生命周期一致,一级缓存也叫session级的缓存,也称事务级缓存

哪些方法支持一级缓存?
 *load
 *get
 *iterate查询实体对象支持一级缓存

一级缓存是缓存实体对象的

一级缓存如何管理?
 * session.clear(),session.evict()
 
如何避免一次性打批量的实体数据插入后内存溢出
 * 先flush,再clear
  
如果在现实工作中,遇到了大规模的数据,建议使用jdbc导入或数据库特定工具导入

 

hibernate二级缓存

二级缓存也称进程级缓存或SessionFactory级缓存,二级缓存可以被所有的session共享
二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存

二级缓存的配置和使用:
 * 将ehcache.xml配置文件拷贝到src下
 * 启用二级缓存,默认是启用的
 <property name="hibernate.cache.use_second_level_cache">true</property>
 * 指定缓存产品提供商,如:
  <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
 * 指定哪些实体类使用二级缓存(两种方法)
  * 在映射文件中指定
  * 在hibernate.cfg.xml文件中指定
  
二级缓存是缓存实体对象的

 

 

hibernate查询缓存

查询缓存是缓存普通属性结果集的
对实体对象的结果集只缓存id

查询缓存的生命周期,当关联的表发生修改,那么查询缓存的生命周期结束

查询缓存的配置和使用:
 * 在配置文件hibernate.cfg.xml中启用查询缓存,如:
 <property name="hibernate.cache.use_query_cache">true</property>
 * 在程序中必须手动启用查询缓存,如:
 query.setCachable(true)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

component映射

在hibernate中,component是实体对象的逻辑组成部分,它与实体对象的根本区别在于没有oid

采用component映射的好处:实现了对象模型的细粒度划分,层次分明,利于复用

 

 

复合主键映射(联合主键)

通常将复合主键相关的属性放到一个单独的类中,这个是有约束的:
 * 必须实现序列化接口
 * 必须复写hashCode和equals方法
 

 lazy策略可以应用在:
 * <class>标签上,可以取值true/false
 * <property>标签上,可以取值true/false,需要类增强工具
 * <set><list>集合标签上,可以取值true/false/extra
 * <one-to-one>、<many-to-one>单端关联上,可以取值false/proxy/noproxy
 
lazy的概念:在正真使用的时候发出查询语句加载相应的对象

hibernate支持lazy策略只有在session打开状态下才有效

hibernate类级别的lazy只对普通属性起作用,可以控制什么时候加载这些普通属性 

 

hibernate在集合上的lazy策略:可以取值true/false/extra

true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其
     集合元素的数据
false:取消lazy特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据
extra:一种比较聪明的lazy策略,即调用集合的size等方法的时候,hibernate 并不会去
      加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需
      要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据

<class>标签上配置的lazy不会影响到集合上的lazy特性

 

 

hibernate在单端关联上的lazy策略可以取值:false/proxy/noproxy

false:取消lazy策略,即在加载对象的同时,发出查询语句,加载其关联对象
proxy:这是hibernate对单端关联的默认lazy策略,即只有在调用到其关联对象的方法的时候
      才真正发出查询语句查询其对象数据,其关联对象是代理类
no-proxy:这种lazy特性需要对类进行增强,使用no-proxy,其关联对象不是代理类

<class>标签上配置的lazy不会影响到单端关联对象上的lazy特性

分享到:
评论

相关推荐

    Hibernate缓存笔记

    Hibernate缓存笔记,代码讲解

    Hibernate学习笔记

    Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略

    马士兵hibernate学习笔记(原版)

    目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    hibernate初学者笔记

    关于hibernate的Session,向数据插入时的事务隔离级别,持久化对象的状态,对应关系的映射文件,表与表之间的多种映射关系,以及hibernate的二级缓存的笔记。

    hibernate学习笔记

    Hibernate 学习笔记 Hibernate 学习笔记 1 第一个hibernate项目(hibernate_first) 2 测试实体对象的生命周期(hibernate_session) 3 hibernate基本映射(hibernate_basemapping) 4 class实体类---表 4 标签id 5 ...

    hibernate操作数据库笔记

    //该方法将到classpath下解析hibernate.cfg.xml中的配置,如果不用Hibernate默认的配置文件名和路径,可在该方法中指定Hibernate配置文件的名称和路径 2.用Configuration对象获取SessionFactory和Session对象:...

    hibernate笔记

    超级完全的hibernate笔记,大家赶快下载。由李勇老师讲解,关系映射,一级缓存,二级缓存,查询缓存等等,相当的全啊。 此为doc格式

    SSH笔记-二级缓存

    SSH笔记-hibernate二级缓存的配置方法和使用方法,及相关注意事项

    spring hibernate 事务管理学习笔记(二)

    NULL 博文链接:https://microjava.iteye.com/blog/525981

    MyBatis第一天课堂笔记.docx

    门槛高在怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate缓存与数据加载策略方面需要你的经验和能力都很强才行。国内目前前的情况精通hibernate技术大牛非常少。 3. sql优化方面,...

    高级框架阶段 MyBatis,Spring,SpringMVC,SSM,RBAC,hibernate,shiro

    视频+代码+笔记 01 MyBatis3 02 Spring4 03 SpringMVC 04 SSM框架整合和核心要点复习 05 RBAC权限控制项目 06. hibernate3 07. hibernate4 08. JFinal框架 09. shiro安全框架 10. solr搜索框架 11. struts2 12. ...

    全面掌握 Hibernate 框架技术

    全面包含Hibernate相关技术,老司机手把手带你一起飞,让你少走弯路。 包含Hibernate相关技术: ...组件映射、继承映射、缓存、JPA 反向工程、封装GenericDao 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    Java_HibernateDemoDay1

    第1章 Hibernate_day01 笔记 1.1 Hibernate 框架的学习 路线 第一天:Hibernate 的入门(Hibernate 的环境搭建、Hibernate 的API、Hibernate 的 CRUD) 第二天:Hibernate 的一级缓存、其他的 API 第三天:Hibernate...

    mybatis_day01.docx

    增加了程序员的一些操作,但是带来了设计上的灵活,并且也是支持hibernate的一些特性,如延迟加载,缓存和映射等;对数据库的兼容性比hibernate差。移植性不好,但是可编写灵活和高性能的sql语句。

    logaze:更好的界面可过滤Lenovo插座上的笔记本电脑

    结果缓存,托管在 这种精简的架构通过在缓存结果来为用户提供快速的数据访问,同时在免费的上运行刮板,该在不活动期间处于Hibernate状态。 当用户访问,用户会看到从立即检索的缓存结果。 这使用户可以快速开始...

Global site tag (gtag.js) - Google Analytics