mybatisplus不支持sum,但支持这个

[复制链接]
发表于 2022-9-28 21:31:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我们知道,要对数据求和,写sql很简单:select sum(exp) from table_name
我们在用mybatisplus做求和计算的时候,mybatisplus的Wrapper不支持sum函数。
这种情况下,我们就无法使用lambda表达式了,只能以字符串的形式写"sum(xxx)", look below:
  1. public Result<Long> getPlatOrderTransCount(MerPlatOrderRequest merPlatOrderRequest) {
  2.     QueryWrapper<SbhPlatOrder> queryWrapper = new QueryWrapper<>();
  3.     queryWrapper.select("sum(amt) as total ");
  4.     queryWrapper.between("order_end_time", merPlatOrderRequest.getStartTime(),merPlatOrderRequest.getEndTime());
  5.     Map<String, Object> count = sbhPlatOrderManager.getMap(queryWrapper);
  6.     if (count==null){
  7.         return Result.success(0L);
  8.     }
  9.     Double total = Double.valueOf(String.valueOf(count.get("total")));
  10.     return Result.success(total.longValue());
  11. }
复制代码
 
再一种情况,我们对数据做分组查询,sql语句通常是:select col1,col2,sum(exp) from table_name group by col1,col2
同样,在程序里用mybatisplus也是无法用lambda实现,只能拼接sql。like this:
  1. public Map<String, Object> getProviderPromoteTotal(String settleNumber,
  2.                                                    EnterpriseProviderDTO enterpriseProviderDTO){
  3.     return this.getMap(new QueryWrapper<LevyPromoteDetail>()
  4.         .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")
  5.         .eq("settle_number", settleNumber)
  6.         .eq("service_id", enterpriseProviderDTO.getProviderId())
  7.         .groupBy("service_id, separate_state"));
  8. }
复制代码
 
是不是很不爽?而且,这种字符串的形式存在隐患,当字段名发生变化,一旦这里漏改,也许就会出现bug。如果用lambda表达式就没这个困扰了,利用IDEA重命名属性,这里会同时变更的。 ∴,能用lambda就用lambda吧。本着这个原则,于是乎,就有了下面的代码,只是把没办法的sum放到字符串里,其他字段仍然用lambda,尽力了~~
  1. public void total() {
  2.     QueryWrapper<SbhPlatOrder> queryWrapper = Wrappers.query();
  3.     queryWrapper.lambda()
  4.             .ge(SbhPlatOrder::getCreateTime, new Date())
  5.             .lt(SbhPlatOrder::getCreateTime, new Date())
  6.             .groupBy(SbhPlatOrder::getProduct, SbhPlatOrder::getEnterpriseId, SbhPlatOrder::getLevyId);
  7.     queryWrapper.lambda().select(SbhPlatOrder::getEnterpriseId, SbhPlatOrder::getProduct);
  8.     String columns= queryWrapper.getSqlSelect()+",sum(IFNULL(suc_amt,0))";
  9.     queryWrapper.select(columns);
  10.     List<SbhPlatOrder> list = sbhPlatOrderManager.list(queryWrapper);
  11. }
复制代码
 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表