Mybatis能執行一對一、一對多的關聯查詢?有哪些實現方式,區別

能,Mybatis不僅可以執行一對一、一對多的關聯查詢,還可以執行多對一,多對多的關聯查詢,多對一查詢,其實就是一對一查詢,只需要把selectOne()修改為selectList()即可;多對多查詢,其實就是一對多查詢,只需要把selectOne()修改為selectList()即可。

關聯對象查詢,有兩種實現方式,一種是單獨發送一個sql去查詢關聯對象,賦給主對象,然後返回主對象。另一種是使用嵌套查詢,嵌套查詢的含義為使用join查詢,一部分列是A對象的屬性值,另外一部分列是關聯對象B的屬性值,好處是隻發一個sql查詢,就可以把主對象和其關聯對象查出來。

那麼問題來了,join查詢出來100條記錄,如何確定主對象是5個,而不是100個?其去重複的原理是標籤內的子標籤,指定了唯一確定一條記錄的id列,Mybatis根據列值來完成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 |


分享到:


相關文章: