zoukankan      html  css  js  c++  java
  • Hibernate笔记=>检索策略

     
    Hibernate提供以下检索策略:
    ==> 立即检索
    ==> 延迟检索
    ==> 迫切左外连接检索
     
    总结一下优缺点和优先考虑使用的场合
    1、立即检索:
    优点:
    对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象。
    缺点:
    [1]select语句数目多
    [2]可能会加载应用程序不需要访问的对象,浪费时间和内存空间
    优先考虑使用的场合:
    [1]类级别
    [2]应用程序需要立即访问的对象
    [3]使用了二级缓存
     
    2、延迟检索:
    优点:
    由应用程序决定需要加载哪些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且节省内存空间
    缺点:
    应用程序如果需要访问游离状态的代理类实例,必须保证它在持久化状态时已经被初始化。
    优先考虑使用的场合:
    [1]一对多或者多对多关联
    [2]应用程序不需要立即访问或者根本不访问的对象
     
    3、迫切左外连接检索:
    优点:
    [1]对应用程序完全透明,不管对象处于之久化状态还是游离状态,应用程序都可以方便的从一个对象导航到另一个与它关联的对象。
    [2]使用了外连接,select语句数目少
    缺点:
    [1]可能会加载应用程序不需要访问的对象,浪费内存空间
    [2]复杂的数据表连接会影响检索性能
    优先考虑使用的场合:
    [1]多对一或者一对一关联
    [2]应用程序需要立即访问的对象
    [3]数据库系统具有良好的表连接性能
     
    简单总结一下
        对于立即检索和延迟检索策略,在查询每张表时使用单独的select语句,每个select语句都很简单,查询速度快,但是select数目过多,增加了DB访问频率。
        对于迫切左外连接检索策略,运用了SQL外连接的查询功能,select语句数量少,可减少DB访问频率,但是每个select语句的复杂度增加了,DB系统建立表之间的连接也是耗时的操作,所以查询效率会有所下降。
        对于关联级别的立即检索和延迟检索,可以设置批量检索数量,以减少select语句数量,从而改善性能。<class>和<set>的batch-size属性的合理取值应该在3-10之间。
        对于实际应用,为了选择合适的检索策略,需要测试应用程序的各个用例,跟踪使用不同检索策略的Hibernate执行SQL的语句。可以把Hibernate.properties文件中的show_sql属性设为true,使得hibernate在运行时输出执行的SQL语句。根据特定的关系模型,评估各种查询语句的性能,比较到底是使用外连接查询速度快,还是使用分开的select语句查询速度快。
    select * from CUSTOMERS left outer join ORDERS on CUSTOMERS.ID=ORDERS.CUSTOMER_ID where CUSTOMERS.ID=1;
    select * from CUSTOMERS where ID=1;
    select * from ORDERS where CUSTOMER_ID=1;
    不断的调节检索策略,以便在减少select语句数量和降低select语句复杂度之间找到一个平衡点,获取最佳的检索性能。
     
    具体MappingXML中的配置
    了解了各自的优缺点,该到动手配置的时候了。以下几个属性用来控制检索策略:
    lazy:可选值为true和false,在<class>和<set>中有此属性,默认值为false,如果为true表示延迟检索。
    outer-join:可选值为auto,true和false,在<many-to-one>,<one-to-one>和<set>中有此属性,其中在<many-to-one>和<one-to-one>中默认值为auto,在<set>中默认值为false。如果为true表示使用迫切左外连接策略。
    batch-size:在<class>和<set>中有此属性,默认值为1,设定批量检索的数量。如果设定此项,合理的取值在3~10之间的整数。仅适用于关联级的立即检索和延迟检索。
  • 相关阅读:
    asp.net mvc在Model中控制日期格式
    MVC3.0删除数据的时候给提示信息
    Jquery的鼠标移动上去显示div,鼠标离开的时候隐藏div效果
    数据库的日志数据库(_log.ldf)文件太大,如何压缩
    如何在加载数据的时候给一个等待动画
    Div内部的内容超出部分显示省略号(仅仅只有一行内容)
    IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    如何用Jquery判断在键盘上敲的哪个按键
    Split()的简单的用法
    oracle AWR报告
  • 原文地址:https://www.cnblogs.com/opaljc/p/1665553.html
Copyright © 2011-2022 走看看