mybatis特性--- 級聯查詢

         我麼都知道Hibernate的關聯對象查詢、級聯刪除、級聯保存等特性,那麼iBATIS是否提供同樣的功能呢?這是大部分人會關心的內容。

      答案也許是另人失望的。iBATIS可以關聯查詢,卻沒有提供級聯保存和級聯刪除的特性。

關聯查詢

iBatis爲我們提供了兩種方式關聯查詢,第一種N+1次查詢,第二種新支持的查詢方式。兩種方式需要根據具體的應用環境,作出合適的選擇。前一種由於多了一次和數據庫的讀取操作,所以讀取速度慢了些,但是可以使用延遲加載減少內存的消耗。而後一種方式多了些內存消耗,但是讀取速度要快了。

定義一個需求:我們在查詢訂單的同時希望查詢出其關聯的訂單項。

  1. 採用N+1次查詢

  2. 首先看看我們的SQL Mapped配置文件如何配置的:

    我們可以看到,RESULT的select屬性指向一個新的查詢語句。

     

    說明:這個很好的解決了關聯查詢的問題,而且如果我們配置了全局的延遲加載,當真正用到訂單項的時候,iBatis才爲我們做查詢的動作。

    但是這卻帶來了另外一個問題,N+1次查詢的問題。也就是多了一次數據庫的讀操作,有一定的性能損失。


  3. 新查詢方式

  4. 首先看看我們的SQL Mapped配置文件如何配置的:


  5. 我們可以看到,RESULT的resultMap屬性指向一個resultMap標籤定義。

     

    說明:與前面N+1次查詢方式比較,由於只讀取數據庫一次,的確讀取速度更快了,但是由於存在更多的內存消耗(N+1方式可以通過延遲加載來減少內存的消耗),所以我們該根據具體的應用情況而選擇合適的方式。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章