ibatis 物件關係實現,一對多,多對一

2021-09-01 03:37:24 字數 1016 閱讀 1201

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 **

select *

from product, category

where prd_cat_id=cat_id

and prd_id = #value#

可以使用內在的resultmap來解決此問題。

同樣一對多如下:

xml **

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屬性來分類

Ibatis查詢注入實現一對多查詢

14 查詢注入 查詢注入是在乙個查詢中嵌入另外乙個查詢,這樣做的目的是為了實現實體物件之間的關聯關聯關係 一對 一 一對多 多對多 分單項雙向。有關這些內容,是比較複雜的,筆者對此做了深入研究,並分別寫了三篇來講述。public class customer orderlist column id ...

ibatis的一對多查詢

在mybatis中,遇到需要一對多和多對多查詢的物件封裝,可以使用標籤載入 而在mybatis的前身ibatis中,不支援該標籤,要進行類似的封裝可以使用resultmap屬性載入 在mybatis中如下的配置 ibatis不支援標籤,可以用下列的方法,效果一致 用groupby屬性代替標籤 直接在...

MySQL關係 一對多 一對一 多對多

將實體與實體的關係,反應到最終資料庫表的設計上,將關係分為三種 一對一,一對多 多對一 和多對多,所有的關係都是表與表之間的關係 一對一 一對一 一張表的一條記錄只能與另外一條記錄進行對應,反之亦然 id p 姓名 性別 年齡 身高 婚姻狀況 籍貫 家庭位址 緊急聯絡人 體重 表設計成以上這種形式 ...