Hibernate延遲加載

 

 

 

Hibernate延遲加載
    
    1. 延遲加載先獲取到代理對象,當真正使用到該對象中的屬性的時候,纔會發送SQL語句,是Hibernate框架提高性能的方式
    2. 類級別的延遲加載
        * Session對象的load方法默認就是延遲加載
        * Customer c = session.load(Customer.class, 1L);沒有發送SQL語句,當使用該對象的屬性時,才發送SQL語句
        
        * 使類級別的延遲加載失效
            * 在<class>標籤上配置lazy=」false」
            * Hibernate.initialize(Object proxy);
    
    3. 關聯級別的延遲加載(查詢某個客戶,當查看該客戶下的全部聯繫人是是不是延遲加載)
        * 默認是延遲加載
      session

     Session session = HibernateUtils.getCurrentSession();
            Transaction tr = session.beginTransaction();
            Customer c = session.get(Customer.class, 1L);
            System.out.println("=============");
            System.out.println(c.getLinkmans().size());
            tr.commit();
    

   
技術分析之Hibernate框架的查詢策略
    
    1. 查詢策略:使用Hibernate查詢一個對象的時候,查詢其關聯對象.應該如何查詢.是Hibernate的一種優化手段!!!   框架

 
    2. Hibernate框架的檢索策略解決的問題
        * 查詢的時機性能

   Customer c1 = (Customer) session.get(Customer.class, 1);
            System.out.println(c1.getLinkmans().size());   

            * lazy屬性解決查詢的時機的問題,須要配置是否採用延遲加載!!
        
        * 查詢的語句形式
         測試

  List<Customer> list = session.createQuery("from Customer").list();
            for(Customer c : list){
                System.out.println(c.getLinkmans());
            }

           
            * fetch屬性就能夠解決查詢語句的形式的問題!!
    

    
技術分析之在set標籤上配置策略
    
    1. 在<set>標籤上使用fetch和lazy屬性
        * fetch的取值                -- 控制SQL語句生成的格式
            * select                -- 默認值.發送查詢語句
            * join                    -- 鏈接查詢.發送的是一條迫切左外鏈接!!!配置了join.lazy就失效了
            * subselect                -- 子查詢.發送一條子查詢查詢其關聯對象.(須要使用list()方法進行測試)
        
        * lazy的取值                -- 查找關聯對象的時候是否採用延遲!
            * true                    -- 默認.延遲
            * false                    -- 不延遲
            * extra                    -- 及其懶惰
    
    2. set標籤上的默認值是fetch="select"和lazy="true"
    
    3. 總結:Hibernate框架都採用了默認值,開發中基本上使用的都是默認值。特殊的狀況。
    

    
技術分析之在man-to-one標籤上配置策略
    
    1. 在<many-to-one>標籤上使用fetch和lazy屬性
        * fetch的取值        -- 控制SQL的格式.
            * select        -- 默認。發送基本select語句查詢
            * join            -- 發送迫切左外鏈接查詢
        
        * lazy的取值        -- 控制加載關聯對象是否採用延遲.
            * false            -- 不採用延遲加載.
            * proxy            -- 默認值.代理.如今是否採用延遲.
                * 由另外一端的<class>上的lazy肯定.若是這端的class上的lazy=」true」.proxy的值就是true(延遲加載).
                * 若是class上lazy=」false」.proxy的值就是false(不採用延遲.)
    
    2. 在<many-to-one>標籤上的默認值是fetch="select"和proxy
 fetch

相關文章
相關標籤/搜索