MybatisPlus使用聚合函数的示例代码

目录
  • 前言
  • 方式1 通过select自定义sql
    • 求一个sum
    • 求多个sum
  • 方式2 xml手写原生sql
  • 总结

前言

今天遇到了一个求总数返回的情况,我一想这不是用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 聚合函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java Fluent Mybatis 聚合查询与apply方法详解流程篇

    前言 接着上一篇文章:Java Fluent Mybatis 分页查询与sql日志输出详解流程篇 我把分页已经调整好了,现在实验一下官方给出的聚合查询方法. GitHub代码仓库:GitHub仓库 数据准备 为了聚合查询的条件,添加了几条数据. MIN 我们试着获取最小的年龄. 方法实现 @Override public Integer getAgeMin() { Map<String, Object> result = testFluentMybatisMapper .findOneMap(

  • MybatisPlus使用聚合函数的示例代码

    目录 前言 方式1 通过select自定义sql 求一个sum 求多个sum 方式2 xml手写原生sql 总结 前言 今天遇到了一个求总数返回的情况,我一想这不是用sum就完事了吗. 但是仔细想想,MybatisPlus好像没有直接使用sum的api. 虽然没有直接提供,但是办法还是有的,下面就分享下如何实现的: 首先如果使用sql是这么写的: ok,既然知道了sql怎么写的,那就开始写代码吧 注意,本文主要以sum为例,但是也同时适用于其他聚合函数,比如avg,min,max 方式1 通过s

  • SqlServer2000+ 身份证合法校验函数的示例代码

    下面看下sqlserver2000身份证校验的代码,具体代码如下所示: /* 身份校验行数 */ if exists(select * from sysobjects where name='fun_utils_idnumberoprater' and type='FN') drop function fun_utils_idnumberoprater go create function fun_utils_idnumberoprater ( @idnumber varchar(50)=''

  • MyBatis-Plus实现多数据源的示例代码

    多数据源的目的在于一个代码模块可调用多个数据库的数据进行某些业务操作. MyBatis-Plus开发者写了一个多数据源叫dynamic-datasource-spring-boot-starter,非常简单易用. dynamic-datasource-spring-boot-starter文档 官方文档部分截图: 第三方集成的,基本上是目前比较主流的(用的比较多). 一.添加Maven依赖 <dependency> <groupId>com.baomidou</groupId

  • sql通过日期判断年龄函数的示例代码

    定义函数: CREATE FUNCTION [dbo].[GetAge] ( @BirthDay nvarchar(20) --生日 ) RETURNS varchar(20) AS BEGIN if(@BirthDay is NUlL or @BirthDay='') return ''; -- Declare the return variable here DECLARE @age varchar(20) DECLARE @years int DECLARE @months int DEC

  • MyBatis-Plus实现逻辑删除的示例代码

    目录 一.引言 二.具体实现 步骤一:首先我们需要配置未删除.已删除分别标识的状态码是什么,这里采用的yml格式. 步骤二:在实体类对应的字段上加上注解@TableLogic即可. 步骤三:测试测试,现在我们测试通过ID来删除某一个用户的时,看看执行的SQL语句是UPDATE了. 三.使用注意细节 一.引言 之前小编讲了MP从入门到核心功能的使用,接下来这几天小编会把MP在实际项目中,一些常用的高级功能给记录一下. 高级功能分为:逻辑删除.自动填充.乐观锁插件.性能分析插件.多租户SQL解析器.

  • C语言模拟实现strstr函数的示例代码

    目录 strstr函数介绍 BF算法介绍 BF算法模拟实现strstr函数 KMP算法介绍 KMP算法模拟实现strstr函数 strstr函数介绍 C语言提供了字符串匹配函数 strstr 函数,请看文档简介. 这个函数是用来匹配 str2 是否包含在 str1 字符串中,如果匹配成功,则返回指向str1中第一个出现的str2的指针,如果str2不是str1的一部分,则返回空指针.我们不妨举例说明,请看下面代码,调用 strstr 函数需要引入string.h头文件,我们发现,s1字符串中可以

  • 使用JS实现一个Sleep函数的示例代码

    目录 前言 1.目标分析 2.setTimeout 封装 3.Promise 封装 4.async/await 总结 前言 我们都是 JavaScript 是一个单线程语言,单线程有它的好处也有它的坏处.在我们熟知的如 Java.C++等语言中,都提供了一个叫做 Sleep 的内置函数.这个函数的作用就和它的名字一样:睡眠. 假设我们有这样一个场景:我们需要在项目运行起来后的十分钟之后去执行一段代码,这段代码可以是符合你业务场景的任何代码,比如查看内存占用多少等等. 在 Java 这类语言中,可

  • 简洁Ajax函数处理(示例代码)

    以下是封装的一个处理函数,使用是也十分方便: 文件的名字命名为: jQuery.ajaxRequest.js . 使用方法: 复制代码 代码如下: $('._ajax').click(function(){ _ajax.request(this);  return false;  }); var _ajax = {      request: function(o){             var tform = $(o).parents('form');             _ar2(t

  • 详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数

    hasattr()函数 hasattr()函数用于判断是否包含对应的属性 语法: hasattr(object,name) 参数: object--对象 name--字符串,属性名 返回值: 如果对象有该属性返回True,否则返回False 示例: class People: country='China' def __init__(self,name): self.name=name def people_info(self): print('%s is xxx' %(self.name))

  • 大数据 java hive udf函数的示例代码(手机号码脱敏)

    Hive UDFHive UDF 函数1 POM 文件2.UDF 函数3 利用idea打包4 添加hive udf函数4.1 上传jar包到集群4.2 修改集群hdfs文件权限4.3 注册UDF4.4 使用UDF Hive UDF 函数 1 POM 文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

随机推荐