hibernate 的強大在於完全的物件化,對於物件之間的關係解決的比較好,如1對1,1對多,多對1,以及多對多。當然也包括繼承關係。
而ibatis這方面就比較遜色了,不過對於也支援簡單的關連查詢,如1對1,和1對多。對於一般的情況來說,這兩種已經足夠了,當然不能層疊更新是乙個缺陷,看了半天文件,也沒有找到物件之間的層疊更新,估計是不支援。
以前的版本ibatis處理關連是通過執行兩次sql來實現的,如下的例項:
一對多關聯:
xml **
這裡通過在resultmap 中定義巢狀查詢getaddressbyuserid,我們實現了關聯資料的讀取。
需要注意的是,這裡有乙個潛在的效能問題,也就是所謂「n+1」select問題。
一對一關聯:
對於這種情況,我們可以採用一次select兩張表的方式,避免這樣的效能開銷(假設上面示例中,每個user 只有乙個對應的address記錄):
xml **
在現在的版本中,對於n+1問題,ibatis已經很好的解決了。如下的配置:
一對一xml **
可以使用內在的resultmap來解決此問題。select *
from product, category
where prd_cat_id=cat_id
and prd_id = #value#
同樣一對多如下:
xml **
注意,需要使用增加groupby屬性來分類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#
Ibatis查詢注入實現一對多查詢
14 查詢注入 查詢注入是在乙個查詢中嵌入另外乙個查詢,這樣做的目的是為了實現實體物件之間的關聯關聯關係 一對 一 一對多 多對多 分單項雙向。有關這些內容,是比較複雜的,筆者對此做了深入研究,並分別寫了三篇來講述。public class customer orderlist column id ...
ibatis的一對多查詢
在mybatis中,遇到需要一對多和多對多查詢的物件封裝,可以使用標籤載入 而在mybatis的前身ibatis中,不支援該標籤,要進行類似的封裝可以使用resultmap屬性載入 在mybatis中如下的配置 ibatis不支援標籤,可以用下列的方法,效果一致 用groupby屬性代替標籤 直接在...
MySQL關係 一對多 一對一 多對多
將實體與實體的關係,反應到最終資料庫表的設計上,將關係分為三種 一對一,一對多 多對一 和多對多,所有的關係都是表與表之間的關係 一對一 一對一 一張表的一條記錄只能與另外一條記錄進行對應,反之亦然 id p 姓名 性別 年齡 身高 婚姻狀況 籍貫 家庭位址 緊急聯絡人 體重 表設計成以上這種形式 ...