日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

order by 子查询_【框架】118:mybatis之多表高级查询

發(fā)布時(shí)間:2024/7/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 order by 子查询_【框架】118:mybatis之多表高级查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天是劉小愛自學(xué)Java的第118天。

感謝你的觀看,謝謝你。

學(xué)習(xí)內(nèi)容安排如下:

  • 補(bǔ)充說明知識點(diǎn):resultMap,sql片段。
  • mybatis中的高級查詢,即多表關(guān)聯(lián)查詢。
  • 查詢主要分為:一對一,一對多,多對多,本來打算全學(xué)完的,奈何計(jì)劃趕不上變化。

一、知識點(diǎn)補(bǔ)充

1resultMap

又要提到前面那個(gè)說了好幾遍的起別名問題了,使用resultMap標(biāo)簽也能解決這個(gè)問題。

當(dāng)然該標(biāo)簽最主要的應(yīng)用還是在于多表關(guān)聯(lián)查詢,先對其有個(gè)初步了解:

select標(biāo)簽中resultMap的值為userMap,根據(jù)這個(gè)值找到對應(yīng)id的resultMap標(biāo)簽。

這樣的一個(gè)好處在于獨(dú)立出來了一個(gè)標(biāo)簽,我們在該標(biāo)簽里面可以做很多事情。

上述中就可以在resultMap標(biāo)簽中使用type屬性說明,其對應(yīng)的實(shí)體類為User。

使用result子標(biāo)簽也可以將數(shù)據(jù)表中的字段和實(shí)體類屬性關(guān)聯(lián)起來:

  • column對應(yīng)的也就是數(shù)據(jù)庫中的列名。
  • property對應(yīng)的也就是實(shí)體類的屬性。

當(dāng)然取別名的方法還是使用settings開啟駝峰匹配方便,不過resultMap也有其它的應(yīng)用。

2sql片段

我們先看兩條sql語句:

在sql語句中,*號是大忌,它的出現(xiàn)也就意味著性能低下,一般都不會(huì)直接用它。

在這里使用將所有列名都書寫的查詢方式,這兩條sql語句本質(zhì)上其實(shí)就是一回事。

當(dāng)然具體如何優(yōu)化sql語句,應(yīng)該沒這么簡單,我只是以此引出sql片段這個(gè)知識點(diǎn)。

如果每次都要書寫這么長的sql語句,顯然是一件很麻煩的事情。

所以為了解決這個(gè)問題,使用sql片段:

將sql語句經(jīng)常被使用的部分抽取成一個(gè)sql片段,在sql語句中使用標(biāo)簽引用該片段即可。

當(dāng)然關(guān)于sql片段我們專門創(chuàng)建一個(gè)xml文件存放,再引用對應(yīng)的片段也是可以的。

不過要注意:在核心配置文件中別忘了引入該映射文件,我這邊就不說詳述了。

3高級查詢引入

表與表之間的關(guān)系,無外乎就是三種:

  • 一對一關(guān)系:比如用戶和訂單關(guān)系。
  • 一對多關(guān)系:比如訂單和訂單詳情關(guān)系。
  • 多對多關(guān)系:比如訂單和商品的關(guān)系。

二、一對一查詢

案例:根據(jù)訂單號,查詢出訂單信息,以及下單人信息。

1案例分析

①需求分析

因?yàn)樯婕暗接唵涡畔⒈?#xff0c;和下單人信息表兩張表的信息,所以需要使用到多表關(guān)聯(lián)查詢。

②查詢結(jié)果

其結(jié)果有兩張表的數(shù)據(jù),那么如何在Java中接受查詢到的數(shù)據(jù)呢?

我們知道數(shù)據(jù)表可以對應(yīng)一個(gè)Java實(shí)體類,現(xiàn)在有多張表數(shù)據(jù)如何對應(yīng)一個(gè)Java實(shí)體類?

就可以使用③這種方式,將User實(shí)體類對象作為Order實(shí)體類的成員變量。

2代碼編寫

①mapper層接口方法

根據(jù)訂單號查詢訂單和用戶,參數(shù)為訂單號,結(jié)果為一個(gè)order對象。

②映射文件sql語句編寫

這不用多說,上述就已經(jīng)分析了。

③測試代碼

我們會(huì)發(fā)現(xiàn)其查詢結(jié)果中,order實(shí)體類中的user屬性為null

為什么會(huì)這樣呢?

因?yàn)閙ybatis并不能自動(dòng)映射user實(shí)體類,所以需要自行配置resultMap。

3代碼優(yōu)化

①結(jié)果集類型為order

指定結(jié)果集id,編寫對應(yīng)的resultMap標(biāo)簽。

②association標(biāo)簽

其翻譯過來本身就是聯(lián)合的意思。

  • property:也就是order中需要關(guān)聯(lián)的屬性,這里也就是user。
  • javaType:關(guān)聯(lián)屬性對應(yīng)的Java類型,這里也就是User實(shí)體類。

③關(guān)聯(lián)屬性id

User的id在order中對應(yīng)的也就是user_id。

再次測試查詢時(shí),就能發(fā)現(xiàn)查詢結(jié)果中user類中的數(shù)據(jù)也能獲取了。

三、一對多查詢

案例:查詢訂單,查詢出下單人信息并且查詢出訂單詳情。

①sql語句編寫

查詢結(jié)果與三張表相關(guān)聯(lián),那么一共有兩次表關(guān)聯(lián)查詢。

②數(shù)據(jù)庫查詢結(jié)果

通過結(jié)果我們可以發(fā)現(xiàn)一個(gè)訂單號查詢出了2個(gè)訂單詳情。

③Order實(shí)體類拓展

訂單和訂單詳情是一對多關(guān)系,那么同理,將訂單詳情的集合封裝成訂單的一個(gè)屬性。

分析完畢,代碼編寫,同樣的方式使用resultMap標(biāo)簽,一次性將代碼寫完整。

①mapper層接口方法說明

②映射文件中sql語句編寫

③一對多查詢,collection標(biāo)簽,其本身翻譯過來也就是集合的意思:

  • property:屬性名,這里也就是封裝到Order類中的orderdetails屬性。
  • javaType:集合類型,我們封裝的是List。
  • ofType:集合中的元素類型,即泛型。
  • autoMapping:開啟自動(dòng)映射

id子標(biāo)簽:要指定在查詢結(jié)果中orderdetail表中的id,其id我們使用了起別名的方式加以說明,也就是detail_id。

最后

謝謝你的觀看。

如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。

總結(jié)

以上是生活随笔為你收集整理的order by 子查询_【框架】118:mybatis之多表高级查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。