order by 子查询_【框架】118:mybatis之多表高级查询
今天是劉小愛自學Java的第118天。
感謝你的觀看,謝謝你。
學習內容安排如下:
- 補充說明知識點:resultMap,sql片段。
- mybatis中的高級查詢,即多表關聯查詢。
- 查詢主要分為:一對一,一對多,多對多,本來打算全學完的,奈何計劃趕不上變化。
一、知識點補充
1resultMap
又要提到前面那個說了好幾遍的起別名問題了,使用resultMap標簽也能解決這個問題。
當然該標簽最主要的應用還是在于多表關聯查詢,先對其有個初步了解:
select標簽中resultMap的值為userMap,根據這個值找到對應id的resultMap標簽。
這樣的一個好處在于獨立出來了一個標簽,我們在該標簽里面可以做很多事情。
上述中就可以在resultMap標簽中使用type屬性說明,其對應的實體類為User。
使用result子標簽也可以將數據表中的字段和實體類屬性關聯起來:
- column對應的也就是數據庫中的列名。
- property對應的也就是實體類的屬性。
當然取別名的方法還是使用settings開啟駝峰匹配方便,不過resultMap也有其它的應用。
2sql片段
我們先看兩條sql語句:
在sql語句中,*號是大忌,它的出現也就意味著性能低下,一般都不會直接用它。
在這里使用將所有列名都書寫的查詢方式,這兩條sql語句本質上其實就是一回事。
當然具體如何優化sql語句,應該沒這么簡單,我只是以此引出sql片段這個知識點。
如果每次都要書寫這么長的sql語句,顯然是一件很麻煩的事情。
所以為了解決這個問題,使用sql片段:
將sql語句經常被使用的部分抽取成一個sql片段,在sql語句中使用標簽引用該片段即可。
當然關于sql片段我們專門創建一個xml文件存放,再引用對應的片段也是可以的。
不過要注意:在核心配置文件中別忘了引入該映射文件,我這邊就不說詳述了。
3高級查詢引入
表與表之間的關系,無外乎就是三種:
- 一對一關系:比如用戶和訂單關系。
- 一對多關系:比如訂單和訂單詳情關系。
- 多對多關系:比如訂單和商品的關系。
二、一對一查詢
案例:根據訂單號,查詢出訂單信息,以及下單人信息。
1案例分析
①需求分析
因為涉及到訂單信息表,和下單人信息表兩張表的信息,所以需要使用到多表關聯查詢。
②查詢結果
其結果有兩張表的數據,那么如何在Java中接受查詢到的數據呢?
我們知道數據表可以對應一個Java實體類,現在有多張表數據如何對應一個Java實體類?
就可以使用③這種方式,將User實體類對象作為Order實體類的成員變量。
2代碼編寫
①mapper層接口方法
根據訂單號查詢訂單和用戶,參數為訂單號,結果為一個order對象。
②映射文件sql語句編寫
這不用多說,上述就已經分析了。
③測試代碼
我們會發現其查詢結果中,order實體類中的user屬性為null
為什么會這樣呢?
因為mybatis并不能自動映射user實體類,所以需要自行配置resultMap。
3代碼優化
①結果集類型為order
指定結果集id,編寫對應的resultMap標簽。
②association標簽
其翻譯過來本身就是聯合的意思。
- property:也就是order中需要關聯的屬性,這里也就是user。
- javaType:關聯屬性對應的Java類型,這里也就是User實體類。
③關聯屬性id
User的id在order中對應的也就是user_id。
再次測試查詢時,就能發現查詢結果中user類中的數據也能獲取了。
三、一對多查詢
案例:查詢訂單,查詢出下單人信息并且查詢出訂單詳情。
①sql語句編寫
查詢結果與三張表相關聯,那么一共有兩次表關聯查詢。
②數據庫查詢結果
通過結果我們可以發現一個訂單號查詢出了2個訂單詳情。
③Order實體類拓展
訂單和訂單詳情是一對多關系,那么同理,將訂單詳情的集合封裝成訂單的一個屬性。
分析完畢,代碼編寫,同樣的方式使用resultMap標簽,一次性將代碼寫完整。
①mapper層接口方法說明
②映射文件中sql語句編寫
③一對多查詢,collection標簽,其本身翻譯過來也就是集合的意思:
- property:屬性名,這里也就是封裝到Order類中的orderdetails屬性。
- javaType:集合類型,我們封裝的是List。
- ofType:集合中的元素類型,即泛型。
- autoMapping:開啟自動映射
id子標簽:要指定在查詢結果中orderdetail表中的id,其id我們使用了起別名的方式加以說明,也就是detail_id。
最后
謝謝你的觀看。
如果可以的話,麻煩幫忙點個贊,謝謝你。
總結
以上是生活随笔為你收集整理的order by 子查询_【框架】118:mybatis之多表高级查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java程序员最值得学习的10大技术
- 下一篇: 取消android所有动画,androi