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,则返回第二个参数的备用值。
到此这篇关于Mybatis-Plus sum聚合函数及按日期查询并求和的文章就介绍到这了,更多相关Mybatis-Plus sum聚合函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Java Agent的premain方式实现方法耗时监控问题
javaagent是在JDK5之后提供的新特性,也可以叫java代理,这篇文章主要介绍了基于Java Agent的premain方式实现方法耗时监控问题,需要的朋友可以参考下2022-10-10
基于Java class对象说明、Java 静态变量声明和赋值说明(详解)
下面小编就为大家带来一篇基于Java class对象说明、Java 静态变量声明和赋值说明(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06
java基于正则提取字符串中的数字功能【如提取短信中的验证码】
这篇文章主要介绍了java基于正则提取字符串中的数字功能,可用于提取短信中的验证码,涉及java基于正则的字符串匹配相关操作技巧,需要的朋友可以参考下2017-01-01
SpringBoot 整合 Lettuce Redis的实现方法
这篇文章主要介绍了SpringBoot 整合 Lettuce Redis的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-07-07
Java实现一键生成表controller,service,mapper文件
这篇文章主要为大家详细介绍了如何利用Java语言实现一键生成表controller,service,mapper文件,文中的示例代码讲解详细,需要的可以收藏一下2023-05-05


最新评论