有关hibernate相关的延迟加载和缓存机制
来源:互联网 发布:使命召唤4mac迅雷下载 编辑:程序博客网 时间:2024/06/05 10:16
1、延迟加载:
当真正需要数据时才从数据库中加载,目的就是为了提高执行效率
注意:当加载延迟加载的数据时,如果Session关闭,那么就会出现no session的异常,从而导致延迟加载的数据
无法加载
2、延迟加载分类:
1、实体级别的延迟加载
<class lazy="true|false">,只对load方法有效
2、集合关联属性的延迟加载
<set lazy="true|false|extra">
集合属性延迟加载对于程序的性能提升最为明显。
建议使用lazy="extra"提高集合属性的效率,功能除了具备lazy="true"功能外,还可以根据对集合属性不同操作
发送不同的sql语句,比如调用集合属性的size、isEmpty方法时,它会发送select count(*)
3、单端关联属性的延迟加载
<many-to-one lazy="proxy|no-proxy|false">
4、普通属性的延迟加载
<property lazy="false|true">
3、抓取策略:
用于定义怎么去获取关联属性
在关联属性的标签中都一个属性fetch,通过fetch属性指定关联的对象怎么取
<many-to-one fetch="select|join"> 默认的fetch="select"
如果设置为fetch="join",使用左外连接将主体和关联对象立即加载出来,只对get和load方法,在hql语句需要立即抓取关联属性通过fetch关键字
<one-to-one fetch="join|select">
<set fetch="select|subselect|join">
如果设置为fetch="subselect",如果使用get或者load方法加载主体对象,那么发送查询语句,如果HQL语句查询主体对象,关联对象通过子查询抓取
batch-size : 有效的减少1+n产生的sql语句
4、缓存:
什么是缓存:应用程序维持的内存,内存中放置一些常用的数据,以便提高程序读取数据效率
5、缓存的分类:
事务级别的缓存:
适用于经常被不同线程进行删除或者修改操作数据,事务级别的缓存适用于单线程环境
Session级别的缓存 就是事务级别的缓存,或者叫做一级缓存
应用程序级别:
不经常修改的通用性数据放置到应用程序级别的缓存中,让多个事务共享这些数据
SessionFactory级别的缓存 就属于应用程序级别的缓存,或者叫做二级缓存
集群级别:
集群环境下,不同服务器上的应用程序如果维持自己的缓存,那么就会导致集群中多个服务器之间的缓存数据无法同步,就需要集群级别缓存
集群环境下的缓存服务器程序:redis
6、hibernate中的缓存
1、一级缓存:Session级别的缓存,在hibernate中Session级别缓存已经由hibernate,一级缓存中的数据控制由hibernate自行维护,
不需要开发人员设置、维护。一级缓存中只能保存持久化状态的实体对象 。hibernate提供了两个方法可以让开发人员对一级缓存进行有限的管理
void flush() 刷新缓存,强制将缓存中数据和数据库中数据进行同步
void clear() 清空缓存
2、二级缓存:SessionFactory级别的缓存,在hibernate默认并没有开启二级缓存,hibernate也没提供可以应用到企业级开发环境的缓存实现
所以在hibernate如果需要使用二级缓存,应用选择hibernate支持的第三方的缓存实现,然后开启二级缓存
二级缓存中只能放置实体对象,而且是那些不经常修改并且经常被多个Session访问的数据应用放置到二级缓存
7、如何使用二级缓存
1、选择hibernate支持的第三方缓存实现,构建到我们项目中
2、配置缓存、并且在hibernate的配置中启用二级缓存
1、将ehcache的配置文件ehcache.xml放置到当前项目的src下
2、在hibernate.cfg.xml中开启二级缓存,并且指定二级缓存的提供商
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定二级缓存提供商 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
3、在hibernate映射文件中指定哪些实体需要使用二级缓存,并且指定二级缓存的使用策略
在使用二级缓存的实体映射文件中加入<cache usage="read-only|read-write"/>
当真正需要数据时才从数据库中加载,目的就是为了提高执行效率
注意:当加载延迟加载的数据时,如果Session关闭,那么就会出现no session的异常,从而导致延迟加载的数据
无法加载
2、延迟加载分类:
1、实体级别的延迟加载
<class lazy="true|false">,只对load方法有效
2、集合关联属性的延迟加载
<set lazy="true|false|extra">
集合属性延迟加载对于程序的性能提升最为明显。
建议使用lazy="extra"提高集合属性的效率,功能除了具备lazy="true"功能外,还可以根据对集合属性不同操作
发送不同的sql语句,比如调用集合属性的size、isEmpty方法时,它会发送select count(*)
3、单端关联属性的延迟加载
<many-to-one lazy="proxy|no-proxy|false">
4、普通属性的延迟加载
<property lazy="false|true">
3、抓取策略:
用于定义怎么去获取关联属性
在关联属性的标签中都一个属性fetch,通过fetch属性指定关联的对象怎么取
<many-to-one fetch="select|join"> 默认的fetch="select"
如果设置为fetch="join",使用左外连接将主体和关联对象立即加载出来,只对get和load方法,在hql语句需要立即抓取关联属性通过fetch关键字
<one-to-one fetch="join|select">
<set fetch="select|subselect|join">
如果设置为fetch="subselect",如果使用get或者load方法加载主体对象,那么发送查询语句,如果HQL语句查询主体对象,关联对象通过子查询抓取
batch-size : 有效的减少1+n产生的sql语句
4、缓存:
什么是缓存:应用程序维持的内存,内存中放置一些常用的数据,以便提高程序读取数据效率
5、缓存的分类:
事务级别的缓存:
适用于经常被不同线程进行删除或者修改操作数据,事务级别的缓存适用于单线程环境
Session级别的缓存 就是事务级别的缓存,或者叫做一级缓存
应用程序级别:
不经常修改的通用性数据放置到应用程序级别的缓存中,让多个事务共享这些数据
SessionFactory级别的缓存 就属于应用程序级别的缓存,或者叫做二级缓存
集群级别:
集群环境下,不同服务器上的应用程序如果维持自己的缓存,那么就会导致集群中多个服务器之间的缓存数据无法同步,就需要集群级别缓存
集群环境下的缓存服务器程序:redis
6、hibernate中的缓存
1、一级缓存:Session级别的缓存,在hibernate中Session级别缓存已经由hibernate,一级缓存中的数据控制由hibernate自行维护,
不需要开发人员设置、维护。一级缓存中只能保存持久化状态的实体对象 。hibernate提供了两个方法可以让开发人员对一级缓存进行有限的管理
void flush() 刷新缓存,强制将缓存中数据和数据库中数据进行同步
void clear() 清空缓存
2、二级缓存:SessionFactory级别的缓存,在hibernate默认并没有开启二级缓存,hibernate也没提供可以应用到企业级开发环境的缓存实现
所以在hibernate如果需要使用二级缓存,应用选择hibernate支持的第三方的缓存实现,然后开启二级缓存
二级缓存中只能放置实体对象,而且是那些不经常修改并且经常被多个Session访问的数据应用放置到二级缓存
7、如何使用二级缓存
1、选择hibernate支持的第三方缓存实现,构建到我们项目中
2、配置缓存、并且在hibernate的配置中启用二级缓存
1、将ehcache的配置文件ehcache.xml放置到当前项目的src下
2、在hibernate.cfg.xml中开启二级缓存,并且指定二级缓存的提供商
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定二级缓存提供商 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
3、在hibernate映射文件中指定哪些实体需要使用二级缓存,并且指定二级缓存的使用策略
在使用二级缓存的实体映射文件中加入<cache usage="read-only|read-write"/>
阅读全文
0 0
- 有关hibernate相关的延迟加载和缓存机制
- 理解Hibernate的Session和缓存机制
- Hibernate入门BLOG[十四、Hibernate的懒加载和缓存机制]
- hibernate 的延迟加载机制
- Hibernate的延迟加载机制
- Mybatis步步进阶(八)——Mybatis延迟加载和缓存机制
- hibernate的session和缓存
- Bitmap的加载和缓存
- Mybatis懒加载和缓存机制
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- Hibernate延迟加载机制
- hibernate延迟加载机制
- Hibernate延迟加载机制
- 【LeetCode】 3. Longest Substring Without Repeating Characters
- 机器学习实战(二)梯度下降调用scikit-learn库函数(病马问题)
- 2-SAT两题(可行性判断,不含方案求解)
- 用 JSONP 实现跨域请求
- D
- 有关hibernate相关的延迟加载和缓存机制
- Html中的iframe,frameset frame
- mysql数据库执行“数据传输”出错
- 做到这一点,你也可以成为优秀的程序员
- loadrunner Web_类函数之web_submit_data()
- java中URL和File的相互转化
- 对8086中的段的理解
- 基于XML配置的SSH三大框架整合
- 第四周项目3—单链表应用(2)