天天看點

mybatis學習之進階映射

一對一映射查詢

1、資料庫執行腳本:

這裡使用2張表,學生表t_student、位址表t_address,示範查詢學生時查詢出對應的位址對象,首先是StudentDao:

Student實體類:

Address實體類:

AddressDao:

StudentMapper.xml映射檔案:

1)、直接result屬性映射

這裡直接配置對應property屬性,column為資料庫對應的字段名稱,property為javabean對應的字段,這裡使用address.id,mybatis會自動為我們進行封裝,封裝到Student實體的Address屬性上。

junit測試如下:

mybatis學習之進階映射

2)、Association和ResultMap形式:

3)、第二種方式映射時,Address的resultMap嵌套在Student的映射檔案中,不利于代碼的複用,改進版:

這裡使用association進行關聯映射,column為Student實體對應的表中關聯address的字段名稱,select表示該字段值通過其它映射語句直接查詢傳回,傳的id參數即這裡的addressId,AddressMapper.xml:

一對多映射查詢

1、資料導入:

建立年級表t_grade,年級對學生為一對多關系。

首先是根據年級查詢該年級下的所有學生:

1)、建立Grade實體類:

通過students執行個體屬性關聯,然後是GradeDao接口實作:

隻有一個方法findById,這裡查詢時會順帶查出該年級下的所有學生資訊,GradeMapper映射檔案如下:

mybatis多對一關聯使用collection标簽實作,column為Grade實體對應的表的字段,select表示使用該字段進行關聯查詢,StudentDao的findByGradeId具體實作如下:

首先是Dao層:

然後是映射檔案:

然後是StudentDao對應的映射檔案StudentMapper:

這裡Student配置了一個grade屬性,目的是後邊查詢學生順帶查詢出其所屬的班級資訊,Student實體具體實作:

junit測試部分(根據學生查詢對應年級資訊):

mybatis學習之進階映射

junit測試部分(根據年級資訊查詢對應學生資訊):

mybatis學習之進階映射