前言:
之前一直習慣用mybatisPlus,表結構也都比較簡單,mybatisPlus對單表的CRUD 比較友好,今年新換了一家公司,業務場景相對復雜,需要跨表跨庫查詢數據,故,畢業兩年,剛開始接觸手寫sql,話不多說,先介紹今天的主題:很多時候,在查詢數據庫的時候。經常會出現以下的情況:
我們需要獲取到combo_id 所對應的所有的sign_sugject_id,此時,就可以在mybatis的返回結果中嵌套一個list來處理sign_sugject_id。
具體代碼如下:
1. 實體類代碼:
1 public class XXX{ 2 3 private Long id; 4 private String comName; 5 private int companyType; 6 7 public int getCompanyType() { 8 return companyType; 9 } 10 11 public void setCompanyType(int companyType) { 12 this.companyType = companyType; 13 } 14 15 public Long getId() { 16 return id; 17 } 18 19 public void setId(Long id) { 20 this.id = id; 21 } 22 23 public String getComName() { 24 return comName; 25 } 26 27 public void setComName(String comName) { 28 this.comName = comName; 29 } 30 } 31 32 public class YYY{ 33 34 private String title; 35 private List<XXX> signSubject; 36 }
2.mapper.xml 文件
1 <resultMap id="result" type="YYY"> 2 <result property="name" column="name"/> 3 <collection property="signSubject" ofType="XXX"> 4 <id property="id" column="id"/> 5 <result property="comName" column="com_name"/> 6 <result property="companyType" column="company_type"/> 7 </collection> 8 </resultMap> 9 10 <select id="test" resultMap="result"> 11 select a.name, c.id, c.com_name,b.company_type 12 a 13 left join b on a.id = b.combo_id 14 left join c on b.sign_subject_id = c.id 15 where a.id = 109 16 </select>
分析:
注意<collection></collection>標簽中的內容,其中的<id>的取值就是我們需要分組的combo_id,<result>標簽中的內容,和XXX實體類的參數名一一對應。