Mybatis-Plus sum聚合函数及按日期查询并求和的方式详解

作者:m0_55070913 时间:2022-07-09 12:58:07 

一.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:实体类中用来接收&ldquo;今日总收益&ldquo;的变量,类型变成封装类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

标签:Mybatis-Plus,sum,聚合函数,日期查询
0
投稿

猜你喜欢

  • java之assert关键字用法案例详解

    2022-07-10 23:01:32
  • JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

    2023-03-01 16:36:39
  • Java(TM) Platform SE binary 打开jar文件的操作

    2021-10-02 00:08:12
  • 浅谈java的守护线程与非守护线程

    2023-11-25 06:50:23
  • C#中List集合使用Max()方法查找到最大值的实例

    2023-12-01 08:03:32
  • java为何不能多继承的原因详解

    2023-10-12 04:45:00
  • 三步轻松搭建springMVC框架

    2023-02-01 05:38:34
  • Java基础知识之Java语言概述

    2023-11-28 04:36:35
  • Spring Boot中使用Redis实战案例

    2021-06-03 04:17:04
  • Spring boot+beetl+i18n国际化处理的方法

    2023-07-22 00:36:31
  • Java reservedcodecachesize虚拟机参数案例详解

    2022-03-15 12:18:48
  • java解析Excel的方法(xls、xlsx两种格式)

    2021-10-12 16:29:39
  • SpringBoot使用jasypt加解密密码的实现方法(二)

    2021-10-15 14:16:46
  • 详解Java注解知识点

    2021-06-24 18:39:12
  • java递归实现汉诺塔步骤介绍

    2022-03-03 09:44:17
  • Java继承Thread类创建线程类示例

    2023-08-04 20:27:08
  • Java获取彩色图像中的主色彩的实例代码

    2021-10-16 01:09:39
  • log4j2日志异步打印(实例讲解)

    2023-11-12 09:02:13
  • Spring容器的创建过程之如何注册BeanPostProcessor详解

    2022-02-17 08:39:09
  • java自定义ClassLoader加载指定的class文件操作

    2022-03-16 16:19:07
  • asp之家 软件编程 m.aspxhome.com