当前位置: 首页 > news >正文

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开发团队可以专门针对这些函数进行封装,这样使用起来就更方便了!

http://www.lryc.cn/news/7397.html

相关文章:

  • 工程管理系统源码企业工程管理系统简介
  • 《计算机视觉和图像处理简介 - 中英双语版》:使用 OpenCV对图像进行空间滤波
  • FreeRTOS软件定时器 | FreeRTOS十三
  • 电脑文件被误删?360文件恢复工具,免费的文件恢复软件
  • pg_cron优化案例--terminate pg_cron launcher可自动拉起
  • Python 之 NumPy 随机函数和常用函数
  • 【目标检测】K-means和K-means++计算anchors结果比较(附完整代码,全网最详细的手把手教程)
  • Java高手速成 | 图说重定向与转发
  • Git:不小心在主分支master上进行修改,怎么才能将修改的数据保存到正确的分支中
  • 都2023年了,如果不会Stream流、函数式编程?你确定能看懂公司代码?
  • 亚马逊云科技汽车行业解决方案
  • 为什么学了模数电还是看不懂较复杂的电路图
  • 帮公司面试了一个30岁培训班出来的程序员,没啥工作经验...
  • 勒索软件、网络钓鱼、零信任和网络安全的新常态
  • python3 字符串拼接与抽取
  • Linux就该这么学:存储结构与管理硬盘
  • JSP四大作用域,九大内置对象
  • 机器学习笔记之生成模型综述(五)重参数化技巧(随机反向传播)
  • 1、创建第一个Android项目
  • 【python百炼成魔】手把手带你学会python数据类型
  • 数据储存以及大小端判断
  • GRASP设计原则
  • 再遇周杰伦隐私协议
  • 关于项目上的一些小操作记录
  • sql查询不以某些指定字符开头(正则表达式)
  • 35.网络结构与模型压缩、加速-2
  • FreeSWITCH跨NAT部署配置详解
  • 【精选论文 | Capon算法与MUSIC算法性能的比较与分析】
  • 卫星、无人机平台的多光谱数据在地质、土壤调查和农业等需要用什么?
  • 30个题型+代码(冲刺2023蓝桥杯)