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开发团队可以专门针对这些函数进行封装,这样使用起来就更方便了!
MybatisPlus使用聚合函数相关推荐
- MybatisPlus调用count函数
项目整合了mybatisPlus时,可以使用count函数做一些简单的统计 前言 今天项目中遇到一个记录统计,由于项目整合过mybatisPlus,就不通过mybatis去写sql做查询,可通过Que ...
- TSQL 聚合函数忽略NULL值
max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...
- Oracle 聚合函数(Aggregate Functions)说明
Oracle Aggregate Functions用过很多,官网的说明如下: Aggregate Functions http://docs.oracle.com/cd/E11882_01/serv ...
- MySQL数据库聚合函数(count、max、min、sum、avg)
1. 聚合函数的介绍 聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据. 常用的聚合函数: count(col): 表示求指定列的总 ...
- Spark:group by和聚合函数使用
groupBy分组和使用agg聚合函数demo: df.show +----+-----+---+ |YEAR|MONTH|NUM| +----+-----+---+ |2017| 1| 10| |2 ...
- R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format)、指定单个标识符、、表格转化的时候值不唯一设置聚合函数(均值)
R语言使用reshape2包的dcast函数将dataframe从长表到宽表(Long- to wide-format).指定单个标识符..表格转化的时候值不唯一设置聚合函数(均值) 目录
- mysql的聚合函数综合案例_MySQL常用聚合函数详解
一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...
- SSRS 2012 聚合函数 -- 隔行换色示例
SSRS 2012 聚合函数 -- 隔行换色示例 有时我们希望报表能够显示出数据笔数的流水序号,如果要使用T-SQL查询来做出这种效果,通常必须使用RANK函数以自动产生编号,在此将介绍如何使用SSR ...
- T-SQL 聚合函数Count与NULL
大家都知道聚合函数是做统计用的,而count函数是统计行数的,也就是满足一定条件记录的行数. 下面我们来看下这个count与NULL的微妙关系. CREATE TABLE dbo.Student (S ...
最新文章
- android Canvas 最基础知识总结
- Directory File Disk Searcher
- linux的阻塞waitqueue,Linux阻塞控制 wait_event与wait_event_interruptible函数详解
- 《飞鸽传书》把写程序和文学创作相提并论
- MJRefresh上拉刷新下拉加载
- android程序逆向工程
- 对二维数组排序 使得每行每列非递减
- mapxtreme相关
- Radon 变换原理和应用
- LeetCode刷题第5周小结
- (STM32笔记2)基于hc05的蓝牙实验
- php get defined,php中get_defined_constants函数用法实例分析
- python中取余%
- send_nsca passive monitor setup notes
- Tomcat 配置集锦
- 模拟cmos集成电路(8)
- Springmvc-简单入门
- 温度实时监控上报(客户端)
- 安装APK报错解决方法
- Ubuntu 安装QQ for Linux 笔记
热门文章
- PHPExcel使用的常用说明以及把PHPExcel整合进CI框架
- 安卓平板usb变显示器_台电千元水桶平板电脑,能办公能上网课,玩游戏比手机更爽...
- L1-018 大笨钟(java)
- 计算机考试 什么链,啥数组、链表、线性结构?计算机二级office选择题必考串讲2-2...
- 杨森翔的书法-4爨体对联:海上天中
- sql如何遍历几百万的表_关于SQL查询效率,100w数据,查询只要1秒
- 【Rookie初学Java】关于初学Java遇到的一些具体问题
- FIR数字滤波器设计_MATLAB语音滤波实验02
- 你好,《01改变世界》
- Python爬虫:BeautifulSoup库