在上篇文章分享了MyBatis框架實現(xiàn)了一對一查詢操作,但是在開發(fā)中一對多查詢操作更為常用。其實在平時生活中一對多關(guān)系就有很多,就比如一個部門下面可以有多個員工,而其中的一個員工也屬于一個部門等等。
接下來我們就來學(xué)習(xí)一下如何在項目中實現(xiàn)一對多的查詢操作呢。
一對多查詢與上一篇一對一查詢的方式一致,但不同的是在mApper配置文件中一對一查詢使用的是association標(biāo)簽,而一對多查詢使用的是collection標(biāo)簽。
這里以部門和員工為例講解一對多級聯(lián)查詢操作,一個部門下面關(guān)聯(lián)著多個員工。
創(chuàng)建兩張數(shù)據(jù)表,一個是部門表,一個是員工表,這兩張表具有一對多的關(guān)聯(lián)關(guān)系,在員工表添加外鍵dept_id字段去關(guān)聯(lián)部門表的主鍵dept_id字段。
t_dept 部門表

t_employee 員工表

創(chuàng)建兩張表對應(yīng)的實體bean類。
Dept部門類


Employee員工類


現(xiàn)在讓我們看看如何獲取部門信息以及其所對應(yīng)的員工列表信息。
其實和一對一映射一樣,我們可以兩種方式實現(xiàn),分別是嵌套結(jié)果和分步查詢兩種方式,都可以實現(xiàn)一對多映射查詢。
1.嵌套結(jié)果,執(zhí)行一個SQL語句(類似于MySQL的連接查詢)
我們可以使用嵌套結(jié)果resultMap方式獲得部門及其員工信息,代碼如下:
創(chuàng)建DeptMapper.xml配置文件,代碼如下:


在mapper配置文件中,<collection>元素是用來將多行員工結(jié)果映射成一個部門Dept對象的一個List集合中。
創(chuàng)建數(shù)據(jù)操作接口DeptMapper,并在接口中定義getDeptInfo方法。

創(chuàng)建調(diào)用數(shù)據(jù)接口的DeptService類。

創(chuàng)建DeptOperTest測試類并測試。

junit測試之后輸出的結(jié)果:


2.分步查詢,執(zhí)行兩個select查詢語句(類似于mysql的子查詢)
我們可以使用嵌套Select語句方式獲得部門及其員工信息,代碼如下:
創(chuàng)建DeptMapper.xml配置文件


創(chuàng)建DeptMapper接口

創(chuàng)建DeptService類


創(chuàng)建DeptOperTest測試類

測試之后輸出的結(jié)果:

注意:部門表和員工表的主鍵id字段名要唯一,例如不能都寫id,如果一樣的話,在查詢的時候就會出現(xiàn),關(guān)聯(lián)查詢出來的員工數(shù)據(jù)只有一條記錄,查不到部門對應(yīng)下面的所有員工。我之前就是將兩張表的主鍵id字段名都寫為id,導(dǎo)致測試結(jié)果查詢出來的員工數(shù)據(jù)只有一條的情況。
好了,今天的分享就到這里了,希望對大家的學(xué)習(xí)有所幫助,也可以在下面留言交流。