hibernate 的強大在於完全的物件化,對於物件之間的關係解決的比較好,如1對1,1對多,多對1,以及多對多。當然也包括繼承關係。
而ibatis這方面就比較遜色了,不過對於也支援簡單的關連查詢,如1對1,和1對多。對於一般的情況來說,這兩種已經足夠了,當然不能層疊更新是乙個缺陷,看了半天文件,也沒有找到物件之間的層疊更新,估計是不支援。
以前的版本ibatis處理關連是通過執行兩次sql來實現的,如下的例項:
一對多關聯:
這裡通過在resultmap 中定義巢狀查詢getaddressbyuserid,我們實現了關聯資料的讀取。
需要注意的是,這裡有乙個潛在的效能問題,也就是所謂「n+1」select問題。
一對一關聯:
對於這種情況,我們可以採用一次select兩張表的方式,避免這樣的效能開銷(假設上面示例中,每個user 只有乙個對應的address記錄):
這裡通過在resultmap 中定義巢狀查詢getaddressbyuserid,我們實現了關聯資料的讀取。
需要注意的是,這裡有乙個潛在的效能問題,也就是所謂「n+1」select問題。
一對一關聯:
對於這種情況,我們可以採用一次select兩張表的方式,避免這樣的效能開銷(假設上面示例中,每個user 只有乙個對應的address記錄):
在現在的版本中,對於n+1問題,ibatis已經很好的解決了。如下的配置:
一對一
select *
from product, category
where prd_cat_id=cat_id
and prd_id = #value#
可以使用內在的resultmap來解決此問題。
同樣一對多如下:
select c.cat_id, c.cat_description, p.prd_id, p.prd_description
from category c left outer join product p
on c.cat_id = p.prd_cat_id
where cat_id = #value#
注意,需要使用增加groupby屬性來分類
如果想實現,延遲載入的情況:
在日誌中顯示sql語句
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.******datasource=debug
log4j.logger.com.ibatis.common.jdbc.scriptrunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.sqlmapclientdelegate=debug
ibatis 物件關係實現
hibernate 的強大在於完全的物件化,對於物件之間的關係解決的比較好,如1對1,1對多,多對1,以及多對多。當然也包括繼承關係。而ibatis這方面就比較遜色了,不過對於也支援簡單的關連查詢,如1對1,和1對多。對於一般的情況來說,這兩種已經足夠了,當然不能層疊更新是乙個缺陷,看了半天文件,也...
ibatis 物件關係實現,一對多,多對一
hibernate 的強大在於完全的物件化,對於物件之間的關係解決的比較好,如1對1,1對多,多對1,以及多對多。當然也包括繼承關係。而ibatis這方面就比較遜色了,不過對於也支援簡單的關連查詢,如1對1,和1對多。對於一般的情況來說,這兩種已經足夠了,當然不能層疊更新是乙個缺陷,看了半天文件,也...
IBatis 利用對映檔案描述物件間的關係
對映兩表之間的關係通過兩個和兩個元素來完成,用vo來描述兩表之間的關係在ibatis框架中,其實仍然是通過sql來完成的。怎樣用sql來表達 一對多 和 多對一 的關係呢?可以利用主表的主鍵作為從表的外來鍵對從表查詢,得到的結果就是 一對多 的關係。那麼 多對一 呢?可以利用從表的外來鍵對主表進行查...