天天看點

Mybatis一對多處理Mybatis一對多處理

Mybatis一對多處理

對于一個老師,可以同時教多個學生,是以站在老師的角度,和學生的關系就是一對多了

這是student表和teacher表内容

Mybatis一對多處理Mybatis一對多處理
Mybatis一對多處理Mybatis一對多處理

pojo:

Mybatis一對多處理Mybatis一對多處理
Mybatis一對多處理Mybatis一對多處理

我們先寫一個接口來查詢出所有老師的記錄

Mybatis一對多處理Mybatis一對多處理

映射檔案:

Mybatis一對多處理Mybatis一對多處理

測試代碼:列印出教師對象内容

Mybatis一對多處理Mybatis一對多處理

運作結果:

Mybatis一對多處理Mybatis一對多處理

我們可以發現,teacher對象中的students沒有成功顯示,這是因為屬性名和字段名不一緻導緻的,是以我們需要使用結果集映射resultMap

要列印teacher對應的學生資訊,我們有必要先修改一下sql語句,把兩張表連接配接起來
Mybatis一對多處理Mybatis一對多處理

定義TeacherStudent結果集映射

Mybatis一對多處理Mybatis一對多處理
由于列印的是teacher的内容,是以type是teacher ;對于簡單屬性,直接用result标簽與資料庫字段作映射,注意這裡的column字段要和上面sql語句的别名保持一緻,否則找不到字段會報錯,一個teacher對應多個學生,是以要用collection标簽,property的值要和實體類裡的屬性同名 ;接着就直接映射學生字段和屬性即可

測試代碼同上,運作一下:

Mybatis一對多處理Mybatis一對多處理

sql語句結果正常顯示,teacher對象包含的所有學生資訊也成功列印出來

tip:如果上面collection标簽下學生的屬性不全部映射的話,列印出來的學生對應的屬性為null

比如不映射stuname

Mybatis一對多處理Mybatis一對多處理

運作結果就不含學生名

Mybatis一對多處理Mybatis一對多處理

這種方法是基于連接配接查詢的一對多處理,還有一種是子查詢方法,較複雜,有興趣的朋友可以去了解一下。

繼續閱讀