Hibernate第八篇【懶加載】

前言

前面在使用Hibernate的時候就說起過了懶加載,但沒有好好地說明具體的說明到底是怎麼回事…本博文主要講解懶加載sql

什麼是攔截器以及爲何要使用懶加載?

懶加載就是當使用數據的時候纔去獲取數據、執行對應的SQL語句當還沒用到數據的時候,就不加載對應的數據!數據庫

主要目的就是爲了提升Hibernate的性能,提升執行效率markdown

  • get: 及時加載,只要調用get方法馬上向數據庫查詢
  • load:默認使用懶加載,當用到數據的時候才向數據庫查詢。

懶加載再次體驗

User user = (User) session.load(User.class, 1);

        System.out.println("________");
        System.out.println(user);

這裏寫圖片描述

咱們能夠在對應的配置文件用一般lazy屬性來設置session

關閉懶加載:性能

<class name="IdCard" table="IdCard" lazy="false">

這裏寫圖片描述

lazy有三個屬性:spa

  • true 使用懶加載
  • false 關閉懶加載
  • extra (在集合數據懶加載時候提高效率)【只有在set、list等集合標籤中使用】
    • 在真正使用數據的時候才向數據庫發送查詢的sql;
    • 若是調用集合的size()/isEmpty()方法,只是統計,不真正查詢數據!

懶加載異常

當Session關閉後,就不能使用懶加載了,不然會報出異常hibernate

Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session

這裏寫圖片描述

報出了這個異常,咱們有4種方法解決:代理

  • 方式1: 先使用一下數據
    • dept.getDeptName();
  • 方式2:強迫代理對象初始化
    • Hibernate.initialize(dept);
  • 方式3:關閉懶加載
    • 設置lazy=false;
  • 方式4: 在使用數據以後,再關閉session!
相關文章
相關標籤/搜索