MybatisPlus使用聚合函數的示例代碼
前言
今天遇到瞭一個求總數返回的情況,我一想這不是用sum就完事瞭嗎。
但是仔細想想,MybatisPlus好像沒有直接使用sum的api。
雖然沒有直接提供,但是辦法還是有的,下面就分享下如何實現的:
首先如果使用sql是這麼寫的:
ok,既然知道瞭sql怎麼寫的,那就開始寫代碼吧
註意,本文主要以sum為例,但是也同時適用於其他聚合函數,比如avg,min,max
方式1 通過select自定義sql
求一個sum
雖然MybatisPlus沒有直接提供對sum函數操作的api,但是QueryWrapper裡面有一個select的api,可以支持我們自定義查詢sql。
註意:我這種寫法需要實體中有這個別名,不然不行的!
那我就直接把代碼貼出來瞭:
public Map queryGuaranteeOrderSumAmount() { GuaranteeOrder guaranteeOrder =new GuaranteeOrder(); QueryWrapper<GuaranteeOrder> queryWrapper = new QueryWrapper<>(); // 退款金額總計 sum聚合函數 queryWrapper.select("sum(refund_amount)refundAmount"); // 這條訂單信息的詳情 GuaranteeOrder guaranteeOrderDetail= this.getOne(queryWrapper); if (guaranteeOrderDetail== null){ guaranteeOrder.setRefundAmount(BigDecimal.valueOf(Double.valueOf(0))); }else{ guaranteeOrder.setRefundAmount(guaranteeOrderDetail.getRefundAmount()); } HashMap<String, Object> map = new HashMap<>(); // 退款金額總計 map.put("refundSumAmount",guaranteeOrderDetail.getRefundAmount()); return map; }
可以看到執行的sql是一樣的。證明我們的思路和語法是沒問題的
求多個sum
那有的小可愛(大聰明)可能就會這麼想瞭,那我要是想sum多個值,是不是再寫一個select就可以瞭,那還真不是!我就是這個大聰明:
如圖所示,我又sum瞭一個字段,但是調用接口的時候,發現一個值是空的:
這其實是錯誤的!除非再創建一個queryWrapper寫select!
正所謂高手怕菜鳥,其實是我們想的太復雜啦,簡單的解決方式是:sql怎麼寫,你就怎麼寫嘛,直接在後面再拼一個條件就好瞭,例如:
這次就好啦,解決問題!
方式2 xml手寫原生sql
覺得上面的方式比較麻煩,那就可以簡單點,直接在mapper(dao).xml裡面手寫sql
一般項目中都是MybatisPlus和Mybatis同時使用的,就是防止一些關聯或者特別麻煩的sql。
總結
雖然MybatisPlus沒有直接提供我們使用聚合函數的api,但是通過select也是可以獲取到編寫自定義sql的,使用起來也還好啦。希望後續國產MP開發團隊可以專門針對這些函數進行封裝,這樣使用起來就更方便瞭!
到此這篇關於MybatisPlus使用聚合函數的示例代碼的文章就介紹到這瞭,更多相關MybatisPlus 聚合函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java學習筆記:關於Java double類型相加問題
- java中BigDecimal用法詳解
- 註意Java中 new BigDecimal(double val) 的使用
- 如何利用反射生成 MyBatisPlus中QueryWrapper動態條件
- Java精確計算BigDecimal類詳解