前言:
mybatis作為一個持久層框架,是一個致力於面向程式設計師,需要程式設計師自行編寫相關的sql語句的orm框架,而開發中涉及到的sql,一較多的基本是查詢的sql,由於表與表之間的關係,我們經常需要處理一對一,一對多,和多對多關係的查詢語句,而針對這些關聯關係,經常用到的是association標籤和collection標籤。
1)一對一查詢:
案例:假設一個用戶可以創建多個訂單,而一個訂單只能由一個用戶創建,因此,用戶與訂單屬於一對多關係,而訂單與用戶屬於一對一關係。
user類:
orders類:
sql語句,根據orders表中的user_id外鍵與user表中的id關聯
mapper接口:
測試:
先加載全局xml文件,最終得到sqlsessionfactory工廠對象
結果:
上邊resultMap裡邊的相關標籤和屬性:
id標籤:property編寫實體類對應的主鍵id,column編寫映射的結果集的id欄位;
result標籤:其他非主鍵使用result標籤;
property:實體類中相應的屬性;
column:查詢映射結果集對應的列的欄位;
association標籤(一對一關聯關係使用):該標籤中的property="user",指將關聯查詢帶的用戶信息映射到user屬性,也就是上邊orders中的user屬性;
javaType:user屬性所屬的pojo類;
2)一對多查詢:
案例:
查詢訂單並關聯查詢訂單詳情,要求映射的結果集,有用戶信息,訂單信息,和訂單詳情信息。
分析:一份訂單裡邊可以有多個商品,訂單詳情指針對每種商品的相關信息的描述,以及訂單的創建時間,編號等。所以訂單與詳情屬於一對多關係。
orderdetail類:
orders類:
sql語句:
關於collection標籤中的相關屬性和上邊的association標籤類似,區別之一只是一個使用的是javaType一個使用的是ofType
接口定義和上邊差不多,這裡就不寫了,只需要知道使用mybatis實現mapper代理時,要滿足:
mapper接口名和mapper.xml中的select標籤的id值保持一致;
返回值和resultType或resultMap的type保持一致;
有參數時,只需要保證參數和parmentType指定的類型一致;
測試:
結果:
3)多對多查詢:
案例:一份訂單裡邊可以有多個商品,同種商品可以在多份訂單中,因此,訂單與商品的關係屬於多對多關係;一條訂單詳情,描述一種商品,訂單詳情與商品又屬於一對一關係。
在本次demo中,訂單與商品關聯是通過訂單詳情表關聯起來的,即訂單詳情起到一個中間表的作用:
orderdetail類:
sql語句:
測試結果: