北京上地网站建设,wordpress扒站工具,做聊天室cpa用什么类型的网站好,行业网站 源码前言
今天遇到了一个求总数返回的情况#xff0c;我一想这不是用sum就完事了吗。
但是仔细想想#xff0c;MybatisPlus好像没有直接使用sum的api。
虽然没有直接提供#xff0c;但是办法还是有的#xff0c;下面就分享下如何实现的#xff1a;
首先如果使用sql是这么写…前言
今天遇到了一个求总数返回的情况我一想这不是用sum就完事了吗。
但是仔细想想MybatisPlus好像没有直接使用sum的api。
虽然没有直接提供但是办法还是有的下面就分享下如何实现的
首先如果使用sql是这么写的 ok既然知道了sql怎么写的那就开始写代码吧 注意本文主要以sum为例但是也同时适用于其他聚合函数比如avgminmax 方式1 通过select自定义sql
求一个sum
虽然MybatisPlus没有直接提供对sum函数操作的api但是QueryWrapper里面有一个select的api可以支持我们自定义查询sql。 注意我这种写法需要实体中有这个别名不然不行的 那我就直接把代码贴出来了 public Map queryGuaranteeOrderSumAmount() {GuaranteeOrder guaranteeOrder new GuaranteeOrder();QueryWrapperGuaranteeOrder 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());}HashMapString, 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开发团队可以专门针对这些函数进行封装这样使用起来就更方便了