我們知道,要對資料求和,寫sql很簡單:select sum(exp) from table_name
我們在用mybatisplus做求和計算的時候,mybatisplus的Wrapper不支持sum函式,
這種情況下,我們就無法使用lambda運算式了,只能以字串的形式寫"sum(xxx)", look below:
public Result<Long> getPlatOrderTransCount(MerPlatOrderRequest merPlatOrderRequest) { QueryWrapper<SbhPlatOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.select("sum(amt) as total "); queryWrapper.between("order_end_time", merPlatOrderRequest.getStartTime(),merPlatOrderRequest.getEndTime()); Map<String, Object> count = sbhPlatOrderManager.getMap(queryWrapper); if (count==null){ return Result.success(0L); } Double total = Double.valueOf(String.valueOf(count.get("total"))); return Result.success(total.longValue()); }
再一種情況,我們對資料做分組查詢,sql陳述句通常是:select col1,col2,sum(exp) from table_name group by col1,col2
同樣,在程式里用mybatisplus也是無法用lambda實作,只能拼接sql,like this:
public Map<String, Object> getProviderPromoteTotal(String settleNumber, EnterpriseProviderDTO enterpriseProviderDTO){ return this.getMap(new QueryWrapper<LevyPromoteDetail>() .select("service_id serviceId,separate_state separateState,count(1) countSum,sum(pay_success_amt) payAmount,sum(plat_fee_amt) platAmount,sum(promote_fee_amt) promoteAmount") .eq("settle_number", settleNumber) .eq("service_id", enterpriseProviderDTO.getProviderId()) .groupBy("service_id, separate_state")); }
是不是很不爽?而且,這種字串的形式存在隱患,當欄位名發生變化,一旦這里漏改,也許就會出現bug,如果用lambda運算式就沒這個困擾了,利用IDEA重命名屬性,這里會同時變更的, ∴,能用lambda就用lambda吧,本著這個原則,于是乎,就有了下面的代碼,只是把沒辦法的sum放到字串里,其他欄位仍然用lambda,盡力了~~
public void total() { QueryWrapper<SbhPlatOrder> queryWrapper = Wrappers.query(); queryWrapper.lambda() .ge(SbhPlatOrder::getCreateTime, new Date()) .lt(SbhPlatOrder::getCreateTime, new Date()) .groupBy(SbhPlatOrder::getProduct, SbhPlatOrder::getEnterpriseId, SbhPlatOrder::getLevyId); queryWrapper.lambda().select(SbhPlatOrder::getEnterpriseId, SbhPlatOrder::getProduct); String columns= queryWrapper.getSqlSelect()+",sum(IFNULL(suc_amt,0))"; queryWrapper.select(columns); List<SbhPlatOrder> list = sbhPlatOrderManager.list(queryWrapper); }
當看到一些不好的代碼時,會發現我還算優秀;當看到優秀的代碼時,也才意識到持續學習的重要!--buguge
本文來自博客園,轉載請注明原文鏈接:https://www.cnblogs.com/buguge/p/16739740.html
<style>hr.signhr{width:80%;margin:0 auto;border: 0;height: 4px;background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.75), rgba(0, 0, 0, 0))}</style>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509766.html
標籤:Java
