能,Mybatis不僅可以執行一對一、一對多的關聯查詢,還可以執行多對一,多對多的關聯查詢,多對一查詢,其實就是一對一查詢,只需要把selectOne()修改為selectList()即可;多對多查詢,其實就是一對多查詢,只需要把selectOne()修改為selectList()即可。
關聯對象查詢,有兩種實現方式,一種是單獨發送一個sql去查詢關聯對象,賦給主對象,然後返回主對象。另一種是使用嵌套查詢,嵌套查詢的含義為使用join查詢,一部分列是A對象的屬性值,另外一部分列是關聯對象B的屬性值,好處是隻發一個sql查詢,就可以把主對象和其關聯對象查出來。
那麼問題來了,join查詢出來100條記錄,如何確定主對象是5個,而不是100個?其去重複的原理是
同樣主對象的關聯對象,也是根據這個原理去重複的,儘管一般情況下,只有主對象會有重複記錄,關聯對象一般不會重複。
舉例:下面join查詢出來6條記錄,一、二列是Teacher對象列,第三列為Student對象列,Mybatis去重複處理後,結果為1個老師6個學生,而不是6個老師6個學生。
t_id t_name s_id
| 1 | teacher | 38 |
| 1 | teacher | 39 |
| 1 | teacher | 40 |
| 1 | teacher | 41 |
| 1 | teacher | 42 |
| 1 | teacher | 43 |
閱讀更多 java執行官 的文章