Mybatis-Plus sum聚合函数及按日期查询并求和的方式详解
作者:m0_55070913 发布时间:2022-07-09 12:58:07
标签:Mybatis-Plus,sum,聚合函数,日期查询
一.Mybatis-Plus——sum聚合函数
//总收益
Order order =new Order();
QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>();
queryWrapper.select("sum(price) as sumAll");
Order ord= orderService.getOne(queryWrapper);
//注意,空指针问题
if (ord== null){
order.setSumAll(Double.valueOf(0)) ;
}else{
order.setSumAll(ord.getSumAll());
}
对应的sql语句是
SELECT sum(price) as sumAll FROM t_order
注意:as后面的变量要与实体类中声明的一致, @TableField(exist = false)表示表中并没有相应的字段与之对应。
(queryWrapper的getOne()方法:根据 Wrapper,查询一条记录)
/**
* 总收益
*/
@TableField(exist = false)
private Double sumAll;
二.按日期查询并求和(mybatis及mybatisPlus两种方式)
举例: 今日总收益
1.mybatisPlus,只需在controller层进行代码书写
//今日总收益
QueryWrapper<Order> queryWrapper = new QueryWrapper<Order>();
queryWrapper.select("sum(price) as sumByToday ");
queryWrapper.eq("TO_DAYS(create_time)","TO_DAYS(NOW())");
Order order =new Order();
if (orderService.getOne(queryWrapper) == null){
order.setSumByToday(Double.valueOf(0)) ;
}else{
order.setSumByToday(orderService.getOne(queryWrapper).getSumByToday());
}
2.mybatis (自己定义sql,简单灵活,但代码量相较于mybatisPlus多了几行)
controller层
//今日总收益
Double sumByToday =orderService.sumByToday();
if (sumByToday == null){
sumByToday = Double.valueOf(0);
}
order.setSumByToday(sumByToday);
service层
Double sumByToday();
service实现层
@Override
public Double sumByToday(){
return orderMapper.sumByToday();
}
mapper层
Double sumByToday();
xml文件
<select id="sumByToday" resultType="java.lang.Double">
select sum(price) as sumByToday from t_order
where TO_DAYS(create_time) = TO_DAYS(NOW())
</select>
3.bug记录,错误信息如下:
Mapper method 'mapper.OrderMapper.sumByToday attempted to return null from a method with a primitive return type (double).
查询出来的值为空,它的数据为null而不是double数据。
解决方法:
方法1:实体类中用来接收“今日总收益“的变量,类型变成封装类Double(Integer、Long,而不是double。
方法2:xml文件中的sql语句变成
select IFNULL(sum(price),0) as sumByToday
from t_order
where TO_DAYS(create_time) = TO_DAYS(NOW())
IFNULL(expression, value):如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。
来源:https://blog.csdn.net/m0_55070913/article/details/123664970
0
投稿
猜你喜欢
- 一、前言介绍:1.1 课题背景 互联网发展至今,无论是其理论还是技术都已经成熟,而且
- Java语言的垃圾回收1.垃圾回收机制的基本概念问:1.什么是Java垃圾回收?答:在Java语言的生命周期中,Java运行环境提供了一个系
- 前言ps命令的作用是显示进程信息的。|符号,是个管道符号,表示左右两边两个命令同时执行。grep命令是查找(Global Regular E
- 前言今天看代码看到有牵扯到弱引用的东西,就先稍微补一补Java的四种引用类型吧。Java为引用类型专门定义了一个类Reference,它是引
- 1.概览该教程中,我将向你展示:如何在测试时设置spring boot 日志级别。虽然我们可以在测试通过时忽略日志,但是如果需要诊断失败的测
- 简介LinkedBlockingQueue是一个阻塞的有界队列,底层是通过一个个的Node节点形成的链表实现的,链表队列中的头节点是一个空的
- 半藏商城中会有一些用户提交了订单但是一直没有支付的情况,之前我是通过quartz定时任务每天的5点扫描未支付订单然后读取用户的邮箱地址发送邮
- 1. 引言 * (Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet的Filter。我们可以让普通的B
- 1、设置ssh安装ssh相关软件包:sudo apt-get install openssh-client openssh-server然后
- 接口:Writerablepackage com.geoway.pad.common; import java.io.DataInput;
- 作为我最近一直在进行的一些编码访谈的一部分,有时会出现不变性问题。我自己并不过分教条,但每当不需要可变状态时,我会试图摆脱导致可变性的代码,
- 最近要做一个java web项目,因为页面不是很多,所以就没有前后端分离,前后端写在一起,这时候就用到thymeleaf了,以下是不动脑式的
- 基于 springboot+vue 的测试平台(练手项目)开发继续更新。接下来准备开发请求断言功能。关于这个功能要实现哪些需求,长什么样子,
- 1. 开方:Math.sqrt(x);2. x的a方:Math.pow(x,a);3. 绝对值:Math.abs(x);4. BigInte
- 前言前天工作中遇到了这样一个问题,我在接口的参数封装了一个pojo,这是很常见的,当参数一多,惯性的思维就是封装一个pojo.那么在参数前有
- 前言之前我们提到了 CustomPaint er 的 Paint 可以使用渐变(GradientShader)来填充绘制的图形,本篇我们来介
- 原因每次使用idea新建项目,就会在默认的c盘下的一个maven仓库中下载jar包,可是我自己指定maven仓库不是这个。如何让idea在新
- 背景产品想对多次快速点击做一下优化,想要的效果就是双击不会打开多次但是从开发角度来说,我可以用kotlin的拓展方法来调整这个,但是之前的历
- 正确使用并行流,避免共享可变状态错用并行流而产生错误的首要原因,就是使用的算法改变了某些共享状态。下面是另一种实现对前n个自然数求和的方法,
- import java.io.BufferedReader; import java.io.IOException;