设为首页 加入收藏

TOP

mybatisplus不支持sum,但支持这个
2023-07-23 13:41:45 】 浏览:15
Tags:mybatisplus 支持 sum 支持这

我们知道,要对数据求和,写sql很简单:select sum(exp) from table_name
我们在用mybatisplus做求和计算的时候,mybatisplus的Wrapper不支持sum函数。事实上,mybatisplus只有 求count 的api,至于其他聚合函数,例如sum、max、min、avg等,都是不支持的。
这种情况下,我们就无法使用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); }

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇day43-反射02 下一篇?打造企业自己代码规范IDEA插件(..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目