zoukankan      html  css  js  c++  java
  • 对象的状态、一级缓存、懒加载

    一、对象的状态

    Hibernate中对象的状态:临时/瞬时状态、持久化状态、游离状态。
    1.临时状态特点

    直接new出来的对象;
    不处于session的管理;
    数据库中没有对象的记录。

    2.持久化状态

    当调用session的save/saveOrUpdate/get/load/list等方法的时候,对象就是持久化状态。处于持久化状态的对象,当对对象属性进行更改的时候,会反映到数据库中!

    持久化状态的特点

    处于session的管理;
    数据库中有对应的记录。

    3.游离状态的特点

    不处于session的管理;
    数据库中有对应的记录;
    session关闭后,对象的状态。

    二、一级缓存

    1.为什么要用缓存?

    目的:减少对数据库的访问次数,从而提升hibernate的执行效率。

    2.Hibernate中缓存的分类

    一级缓存
    二级缓存

    3.概念

    1.Hibernate中一级缓存,也叫session的缓存,它可以在session范围内减少数据库的访问次数!只在session范围有效!session关闭,一级缓存失效!
    2.当调用session的save/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session的缓存中。
    3.session的缓存由hibernate维护,用户不能操作缓存内容;如果想操作缓存内容,必须通过hibernate提供的evit/clear方法操作。

    4.特点

    只在(当前)session范围有效,作用时间短,效果不是特别明显!
    在短时间内多次操作数据库,效果比较明显!

    5.缓存相关几个方法的作用

    session.flush(); 让一级缓存与数据库同步
    session.evict(arg0); 清空一级缓存中指定的对象
    session.clear(); 清空一级缓存中缓存的所有对象
    在什么情况下用上面方法?
    批量操作时候使用:
    session.flush(); //先与数据库同步
    session.clear();//再清空一级缓存内容

    6.面试题1.不同的session是否会共享缓存数据?

    不同的session使用不同的缓存区,不能共享

    7.面试题2.list与iterator查询的区别?

    list()一次把所有的记录都查询出来,iterator()会有一个N+1查询;N表示所有的记录总数,即会先发送一条语句查询所有记录的主键(1),再根据每一个主键再去数据库查询(N)!
    list()会放入缓存但不会从缓存中取;iterator()会放入缓存也会从缓存中取。

    三、懒加载

    1.面试题3. get、load方法区别?

    get是及时加载,只要调用get方法立刻向数据库查询。
    load默认使用懒加载,即在使用数据的时候,才向数据库发送查询的sql语句。

    2.懒加载(lazy)

    概念:当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性。
    目的:提高程序执行效率。

    3. lazy值

    true:使用懒加载
    false:关闭懒加载
    extra:(在集合数据懒加载时候提升效率)在真正使用数据的时候才向数据库发送查询的sql;如果调用集合的size/isEmpty方法只是统计,并不查所有数据。

    4. 懒加载异常

    session关闭后,不能使用懒加载数据!
    如果session关闭后,使用懒加载数据报错!

    如何解决session关闭后不能使用懒加载数据的问题?

    方式一、先使用数据
    方式二、强迫代理对象初始化:Hibernate.initialize(proxy)
    方式三、关闭懒加载,设置lazy=false
    方式四、在使用数据之后再关闭session!

  • 相关阅读:
    Context Menu on DataGrid
    DataGrid Column Group (合并表头)
    DataGrid loadData loadFilter
    sharepoint 2010 FieldLookup 的更新方法
    SharePoint 2010 列表查阅项栏的formfield控件对象取值
    sharepoint2010的几个类型字段赋值和取值的方法
    SharePoint 和 Windows Phone 7 开发人员培训资源
    如何提升SharePoint 2010的性能
    sharepoint国内网站一览表(转发)
    sharepoint2010列表的分页实现迅雷样式效果
  • 原文地址:https://www.cnblogs.com/FlySheep/p/5533500.html
Copyright © 2011-2022 走看看