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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用...

發布時間:2024/7/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天是劉小愛自學Java的第152天。

感謝你的觀看,謝謝你。

學習計劃安排如下:

  • 補充完昨天商品查詢中關于分類和品牌的部分,其中牽扯到了兩個非常重要的知識點:
  • Stream流的使用,這個學過后基本就沒怎么使用過,這次做一個回顧。
  • 通用Mapper根據多個id批量查詢,以前在寫其使用教程的時候都不知道還有這種用法。

一、業務需求分析

昨天雖然完成了商品查詢,但是其有一個問題,我們查詢的數據是SPU,SPU中關于商品分類和品牌只是記錄了其Id。

而在前端頁面,我們需要顯示商品分類和商品品牌對應的具體值。

有兩種解決方法:

第一種:響應SPU中關于商品分類和品牌對應的id給前端,再分別根據id發送請求去數據庫查詢,這種對于前端人員來說就比較麻煩了。

第二種:在查詢SPU時就分別查詢出對應的商品分類和品牌,再將其數據一并響應給前端。

首先要在前端頁面確定需要的字段名,分別為:cname和bname。

其次在SPU實體類中添加這兩個屬性,當然最正規的做法是重新創建一個實體類,這邊為了方便就不這樣做了。

使用注解@Transient將這兩個屬性設為瞬態,意思是從數據庫查詢時不考慮它們。

最后在查詢完畢后通過setCname方法和setBname方法給它們賦值,再響應給前端。

二、Java代碼編寫

我們從SPU數據表中查詢出了商品分類和品牌對應的id,再分別調用:

  • CategoryService中的代碼查詢商品分類。
  • BrandService中的代碼查詢商品品牌。

1Category業務代碼補充

因為有多級商品分類,所以對應多個id。

根據多個id去數據庫查詢,如果是常規方法,會將這些id遍歷,再一一去數據庫查詢。

但是在通用Mapper中,有selectByIdList()方法可以直接根據id集合完成批量查詢。

只需要在Mapper層中繼承IdListMapper接口并指定泛型即可。

同樣的道理,有批量查詢也會有批量新增:繼承InsertListMapper接口并指定泛型即可。

2Brand業務代碼說明

因為品牌不像商品分類有多級之分,一個商品就一個品牌,所以查詢起來很方便。

使用通用mapper中的根據主鍵查詢即可。

3Goods業務代碼整合

上述兩種查詢方式,可以通過前端頁面依次發送請求訪問服務器實現查詢。

但比較麻煩不太合適,所以我們要做的就是將上述兩種查詢方式整合到Goods業務中。

這樣等于是只需要在前端發送一次請求,就對數據庫完成了三次查詢:

①spuList加工處理

spuList是從數據庫中查詢到的spu集合,這里對它的處理說白了就是:

依次調用spu的setBname方法和setCname方法給spu添加對應的商品分類和品牌。

②品牌的添加setBname方法

因為查詢到的spu中有品牌對應的id,所以直接調用BrandService中的方法即可查詢。

③商品分類的添加setCname方法

這個就比較復雜了,依次獲取多級分類對應的id,使用Arrays的asList方法將其轉換成集合,再調用CategoryService中的方法查詢。

查詢到的是一個商品分類集合,按照我們常規的方法就是:

遍歷商品分類集合,然后逐一獲取各個分類,再將這些分類用“/”拼接起來。

這樣自然也是可以的,但是使用Stream流更加地方便,Stream流是jdk8的新特性。

我們看上述圖中關于Stream流的注釋,都有很清楚的說明,依次調用:

  • steam()方法將其轉換成Category的流。
  • map()方法將其轉換成了字符串的流。
  • 什么字符串呢?就是Category中的getName方法。
  • collect()方法完成流的收集,即流結束了。
  • 其中Collectors.joining("/")是表示將收集到的數據以“/”完成拼接。

三、測試

代碼編寫完畢,做一個測試:

再次查詢商品列表,會發現,商品分類和品牌就都顯示出來了。

其中商品分類因為是多級分類,所以用“/”隔開,這就是在Stream流中設置的。

最后

行有不得反求諸己,我是@劉小愛

一個白天上班晚上學習的95后滬漂,不為其它,只為學會自律做好自己,也愿我的每日打卡能給你帶來勇氣,歡迎點贊關注和評論。

總結

以上是生活随笔為你收集整理的使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。