MyBatis collection一對多查詢

2021-08-30 15:37:34 字數 1507 閱讀 1861

最近專案中有這樣一種需求,有一張園區表t_zone;一張表t_picture,乙個園區可能對應好幾張(可以把t_zone理解為訂單,t_picture理解為商品,一張訂單可能對應好幾件商品)

public class zone extends baseentity 

public void setid(string name)

public string getname()

public void setname(string name)

public listgetpicturelist()

public void setpicturelist(listpicturelist)

public string getobjid()

public void setobjid(string objid)

}

public class zone extends baseentity 

public void setid(string name)

public string geturl()

public void seturl(string url)

}

select t1.*

from

t_zone t1

where

t1.id=#

for (zone vo : list)

(其實這舉的例子有點不太好,因為查詢園區返回的是個集合)

專案完成後偶然得知mybatis中collection可以解決一對多查詢,就改寫**,改寫後的**對資料庫進行一次查詢就可以得到想要的結果:

select t1.*, t2.id 'picid',t2.url

from

t_zone t1,t_picture t2

where

t1.id=t2.obj_id

t1.id=#

因為資料庫資料不多,所以就將增加了查詢次數

耗時(ms)

10次

50次

100次

1000次

方法方法一

方法二方法一

方法二方法一

方法二方法一

方法二總耗時

5190

8376829

3984

12642

9017

130017

94880

平均耗時

519.00

83.70

136.58

79.7

126.42

90.17

130.02

94.88

通過對比,可看出方法二用collection明顯比方法一效能要好,耗時少。如果考慮大資料的,可能性能體現的就明顯了。

mysql join 一對多 Join 一對多連線

資料庫常見的join方式有三種 inner join,left outter join,right outter join 還有一種full join,因不常用,本文不討論 這三種連線方式都是將兩個以上的表通過on條件語句,拼成乙個大表。以下是它們的共同點 1.關於左右表的概念。左表指的是在sql語...

MySQL關係 一對多 一對一 多對多

將實體與實體的關係,反應到最終資料庫表的設計上,將關係分為三種 一對一,一對多 多對一 和多對多,所有的關係都是表與表之間的關係 一對一 一對一 一張表的一條記錄只能與另外一條記錄進行對應,反之亦然 id p 姓名 性別 年齡 身高 婚姻狀況 籍貫 家庭位址 緊急聯絡人 體重 表設計成以上這種形式 ...

hibernate單向一對多和雙向一對多

單向一對多 例如有部門封裝類 private int deptno private string deptname private string location 有職員封裝類 private int empno private string empname private dept dept 在多...