在上篇文章分享了MyBatis框架實現了一對一查詢操作,但是在開發中一對多查詢操作更為常用。其實在平時生活中一對多關系就有很多,就比如一個部門下面可以有多個員工,而其中的一個員工也屬于一個部門等等。
接下來我們就來學習一下如何在項目中實現一對多的查詢操作呢。
一對多查詢與上一篇一對一查詢的方式一致,但不同的是在mApper配置文件中一對一查詢使用的是association標簽,而一對多查詢使用的是collection標簽。
這里以部門和員工為例講解一對多級聯查詢操作,一個部門下面關聯著多個員工。
創建兩張數據表,一個是部門表,一個是員工表,這兩張表具有一對多的關聯關系,在員工表添加外鍵dept_id字段去關聯部門表的主鍵dept_id字段。
t_dept 部門表
t_employee 員工表
創建兩張表對應的實體bean類。
Dept部門類
Employee員工類
現在讓我們看看如何獲取部門信息以及其所對應的員工列表信息。
其實和一對一映射一樣,我們可以兩種方式實現,分別是嵌套結果和分步查詢兩種方式,都可以實現一對多映射查詢。
1.嵌套結果,執行一個SQL語句(類似于MySQL的連接查詢)
我們可以使用嵌套結果resultMap方式獲得部門及其員工信息,代碼如下:
創建DeptMapper.xml配置文件,代碼如下:
在mapper配置文件中,<collection>元素是用來將多行員工結果映射成一個部門Dept對象的一個List集合中。
創建數據操作接口DeptMapper,并在接口中定義getDeptInfo方法。
創建調用數據接口的DeptService類。
創建DeptOperTest測試類并測試。
junit測試之后輸出的結果:
2.分步查詢,執行兩個select查詢語句(類似于mysql的子查詢)
我們可以使用嵌套Select語句方式獲得部門及其員工信息,代碼如下:
創建DeptMapper.xml配置文件
創建DeptMapper接口
創建DeptService類
創建DeptOperTest測試類
測試之后輸出的結果:
注意:部門表和員工表的主鍵id字段名要唯一,例如不能都寫id,如果一樣的話,在查詢的時候就會出現,關聯查詢出來的員工數據只有一條記錄,查不到部門對應下面的所有員工。我之前就是將兩張表的主鍵id字段名都寫為id,導致測試結果查詢出來的員工數據只有一條的情況。
好了,今天的分享就到這里了,希望對大家的學習有所幫助,也可以在下面留言交流。