AI Academy
促銷
CodeGym University
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
Java
SQL & Hibernate
等級 14
延遲加載
SQL & Hibernate
等級 14,
課程 0
1.1 問題背景 當您開始使用真實的數據庫時,您會立即記住這句話“過早的優化是萬惡之源”。只是現在你以消極的方式記住了她。使用數據庫時,優化是必不可少的。您需要在設計階段就已經使用它。 Hibernate 使得使用數據庫非常方便。只需正確註釋@OneToMany和 ,您就可以輕鬆獲得任何子對象@ManyToMany。例子:
映射集合時的延遲加載
SQL & Hibernate
等級 14,
課程 1
2.1 獲取選項 Hibernate 的開發人員很早就知道加載子實體的問題。所以他們做的第一件事就是在註釋中添加一個特殊的提取@OneToMany參數,@ManyToMany。 該參數可以取兩個值: 渴望的 懶惰的 例子: @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
LazyCollectionOption.EXTRA
SQL & Hibernate
等級 14,
課程 2
了解 LazyCollectionOption.EXTRA 但最令人感興趣的是 LazyCollectionOption.EXTRA 值。如果您將它指定為@LazyCollection註釋的值,那麼 Hibernate 將盡可能長時間地延遲加載集合的元素。 如果您嘗試獲取集合中元素的數量: User user = session.load(User.class, 1);
加入獲取
SQL & Hibernate
等級 14,
課程 3
問題描述 正如我們上面所說, LazyCollectionOption.EXTRA註解有一個問題——它為每個對像對數據庫執行單獨的請求。我們需要以某種方式向 Hibernate 解釋我們希望它立即為我們的父對象加載所有子對象。 Hibernate 的開發者想出了解決這個問題的方法, HQL 中的join fetch operator 。 HQL查詢示例: select distinct task from Task t left join fetch t.employee o
Hibernate 中的數據緩存
SQL & Hibernate
等級 14,
課程 4
永遠不要編寫緩存解決方案 另一種加快數據庫工作的方法是緩存我們之前已經請求過的對象。 重要的!永遠不要編寫自己的緩存解決方案。這項任務有很多你做夢也想不到的陷阱。 問題 1 -緩存刷新。有時,當需要從緩存中刪除對像或在緩存中更新對象時,會發生事件。勝任地做到這一點的唯一方法是通過緩存引擎將所有請求傳遞給數據庫。否則,每次你都必須明確地告訴緩存應該刪除或更新其中的哪些對象。 問題 2 -內存不足。在您發現內存中的對象佔用大量空間之前,緩存似乎是個好主意。您需要額外的數十 GB
配置二級緩存
SQL & Hibernate
等級 14,
課程 5
並發策略 在 Hibernate 中啟用二級緩存後,您需要向 Hibernate 說明我們要緩存哪些 Entity 對像以及如何緩存。 為此,Hibernate 為實體類提供了一個特殊的註釋 - @Cache。例子: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 需要為我們要為其使用二級緩存的每個 Entity 實體編寫此註釋。例子: @Entity
自定義查詢緩存
SQL & Hibernate
等級 14,
課程 6
為什麼需要查詢緩存 讓我們用 HQL 中的員工重寫我們的例子: Employee director1 = session.createQuery("from Employee where id = 4").uniqueResult();
設置緩存引擎
SQL & Hibernate
等級 14,
課程 7
設置緩存 讓我們回到 hibernate.cfg.xml 文件中的緩存設置:
Please enable JavaScript to continue using this application.