Hibernate的学习.ppt
文本预览下载声明
hibernate缓存 1、基本的缓存原理 Hibernate缓存分为二级: 第一级存放于session中称为一级缓存,默认带有且不能卸载。 第二级是由sessionFactory控制的进程级缓存,是全局共享的缓存。 2、作用: 大幅度的提高Hibernate应用程序的性能,比如说提高了应用程序访问数据的效率。 hibernate缓存 具体的配置方法 具体的配置位置位于hibernate.cfg.xml文件中 property name=hibernate.cache.use_query_cachetrue/property property name=hibernate.cache.provider_classnet.sf.hibernate.cache.HashtableCacheProvider/property hibernate-mapping class name=com.sobey.sbm.model.entitySystem.vo.DataTypeVO table=dcm_datatype cache usage=read-write/ id name=id column=TYPEID type=java.lang.Long generator class=sequence/ /id property name=name column=NAME type=java.lang.String/ property name=dbType column=DBTYPE type=java.lang.String/ /class /hibernate-mapping hibernate缓存 配置的关键 cache usage=read-write/ 其有几个选择: read-only,read-write,transactional Hibernate缓存的分层 针对于缓存生命周期的不同,可以将hibernate缓存分为三个层次: a. 事物级缓存 缓存只能被当前事物访问。这个事物可以是一个数据库事物(比如Session),也可以是某个应用程序大的事物。(“缓存的声明周期依赖于事物的生命周期”) hibernate缓存 b.应用级缓存 缓存在某个应用范围被所有事务共享(指的是数据库事务Session)。缓存的声明周期依赖于应用程序的生命周期,当这个应用程序的生命周期结束时,缓存生命周球随之结束。 hibernate缓存 注意的事项 如果是条件查询,或者返回所有结果的查询,此时session.find()方法 不会获取缓存中的数据。只有调用query.iterate()方法时才会调缓存的数据,同时 get 和 load方法 是都会查询缓存中的数据。 适合于使用二级缓存的情况: a、数据不会被第三方修改; 一般情况下,会被hibernate以外修改的数据最好不要配置二级缓存,以免引起不一致的数据。 hibernate缓存 b、数据大小在可接收范围之内 如果数据表数据量特别巨大,此时不适合于二级缓存。原因是缓存的数据量过大可能会引起内存资源紧张,反而降低性能。 c、数据更新频率低; 对于数据更新频率过高的数据,频繁同步缓存中数据的代价可能和 查询缓存中的数据从中获得的好处相当,坏处益处相抵消。此时缓存的意义也不大 hibernate缓存 d、非关键数据(不是财务数据等) 财务数据等是非常重要的数据,绝对不允许出现或使用无效的数据,所 以此时为了安全起见最好不要使用二级缓存。 因为此时 “正确性”的重要性远远大于 “高性能”的重要性。 hibernate延迟加载 原理: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。 在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。 hibernate延迟加载 介绍: A、实体对象的延迟加载: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。 如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示: hibernate-mapping class name=”com.neusoft.entity.User” table=”user” lazy=”true” …… /class /hibernate-mapping hibernate延迟加载 注意: 通过将class的lazy属性设置为true,来开启实体的延迟加载特性。 所以实体的延迟加载是用通过中间代理类完成的,所以只有session.l
显示全部