SpringBoot系列之MybatisPlus实现分组查询

SpringBoot系列之MybatisPlus实现分组查询

我之前博主曾记写过一篇介绍SpringBoot2.0项目怎么集成MybatisPlus的教程,不过之前的博客只是介绍了怎么集成,并没有做详细的描述各种业务场景,本篇博客是对之前博客的补充,介绍在mybatisPlus项目中怎么使用分组查询,仅供参考借鉴

项目环境

  • 开发环境
    • JDK 1.8
    • SpringBoot2.2.1
    • Maven 3.2+
    • Mysql5.7.36
  • 开发工具
    • IntelliJ IDEA
    • smartGit

实践例子

具体的搭建过程,请参考博主之前博客,为了方便拓展和不影响其它业务,可以基于基本的UserDO类,加上我们分组需要的字段,如下所示:

package com.example.mybatisplus.model;import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.io.Serializable;@TableName("user")
@Data
public class UserCountDO extends UserDO implements Serializable {private static final long serialVersionUID = 3319012504813563043L;@TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)private Long count;@TableField(value = "date_format(create_time, '%Y年%m月%d日')", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)private String chineseDateFormat;}

在重新定义一个Mapper接口

package com.example.mybatisplus.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus.model.UserCountDO;public interface UserCountMapper extends BaseMapper<UserCountDO> {
}

测试类来实现

package com.example.mybatisplus;import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.example.mybatisplus.mapper.UserCountMapper;
import com.example.mybatisplus.mapper.UserMapper;
import com.example.mybatisplus.model.UserCountDO;
import com.example.mybatisplus.model.UserDO;
import com.example.mybatisplus.model.vo.UserCountVo;
import net.minidev.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.*;
import java.util.stream.Collectors;@SpringBootTest
class SpringbootMybatisPlusApplicationTests {@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserCountMapper userCountMapper;@Testvoid testGroupBy() {LambdaQueryWrapper<UserCountDO> selectWrapper = Wrappers.lambdaQuery();selectWrapper.select(UserCountDO::getChineseDateFormat, UserCountDO::getCount);selectWrapper.groupBy(UserCountDO::getChineseDateFormat);List<Map<String, Object>> userMapList = Optional.ofNullable(userCountMapper.selectMaps(selectWrapper)).orElse(Collections.emptyList());List<UserCountVo> resultList = new ArrayList<>();for (Map<String, Object> e : userMapList) {String chineseDateFormat = Convert.toStr(e.get("chineseDateFormat"));Long count = Optional.ofNullable(Convert.toLong(e.get("count"))).orElse(0L);UserCountVo userCountVo = UserCountVo.builder().value(chineseDateFormat).num(count).build();resultList.add(userCountVo);}Date startTime = DateUtil.date(1705248000000L);Date endTime = DateUtil.date(1705852800000L);List<DateTime> dateList = Optional.ofNullable(DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_YEAR)).orElse(Collections.emptyList());for (DateTime dateTime : dateList) {String format = DateUtil.format(dateTime, "YYYY年MM月dd日");if (resultList.contains(format)) {continue;}UserCountVo messageCountDto = UserCountVo.builder().value(format).num(0L).build();resultList.add(messageCountDto);}List<UserCountVo> sortedResultList = resultList.stream().sorted(Comparator.comparing(UserCountVo::getValue, Comparator.nullsLast(String::compareTo))).collect(Collectors.toList());System.out.println(JSONUtil.toJsonPrettyStr(sortedResultList));}}

控制台日志打印:这些数据可以用于Echarts的图标显示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…

【SpringSpringBoot】概述

Spring&SpringBoot专题 【注】&#xff1a; 本专题围绕框架核心概念展开&#xff0c;渐进式深入总结学习、面试、开发经验&#xff0c;集中整理便于回顾 持续补充与施工中~~~~ 1.发展史 2.基本架构 Spring框架的基本架构是一个分层架构&#xff0c;包括多个模块&#x…

2024三掌柜赠书活动第六期:人人都离不开的算法——图解算法应用

目录 前言算法概念图解算法应用算法的价值和挑战关于《人人都离不开的算法——图解算法应用》编辑推荐内容简介作者简介图书目录书中前言/序言书摘插画《人人都离不开的算法——图解算法应用》全书速览结束语 前言 作为开发者想必都知道&#xff0c;算法是现代社会中无处不在…

day33_js

今日内容 0 复习昨日 1 JS概述 2 JS的引入方式 3 JS语法 3.1 变量 3.2 基本数据类型 3.3 引用类型 3.4 数组类型 3.5 日期类型 3.6 运算符(算术运算,逻辑,关系运算,三目运算) 3.7 分支 3.8 循环 3.9 函数(重点) 3 常见弹窗函数 alter,confirm,prompt 0 复习昨日 1 盒子模型 对d…

兄弟MFC-8515DN黑白激光多功能一体机硒鼓及粉盒清零方法

耗材信息&#xff1a; 硒鼓DR-3350&#xff1a;约30000页&#xff1b; 墨粉盒TN-3335&#xff1a;约3000页【A4纸5%覆盖率】&#xff1b; 高容量墨粉盒TN-3385&#xff1a;约8000页【A4纸5%覆盖率】&#xff1b; 超高容量墨粉盒TN-3395&#xff1a;约12000页【A4纸5%覆盖率】&a…

php项目下微信小程序对接实战问题与解决方案

一.实战问题与方案总结 1.SQL查询条件是一组数&#xff0c;传参却是一个字符串导致报错&#xff0c;如下 SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from car_video where province_id in (1492) and city_id in (1493) and county_id …

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程

个体诊所电子处方系统设计&#xff0c;社区门诊处方开单管理系统软件教程 一、前言 以下软件程序操作教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 如图&#xff0c;在基本信息设置里&#xff0c;可以设置处方配方模板&#xff0c;这样在开电子处方的时候可以一键导入…

计算机提示缺失dll文件怎么办?那种dll解决方法更值得推荐

当在运行游戏&#xff0c;软件程序的过程中遇到“找不到dll”的情况时&#xff0c;这实际上意味着系统或应用程序无法定位并加载必要的动态链接库文件&#xff08;DLL&#xff09;&#xff0c;从而无法顺利完成预期的功能调用和执行流程。这种问题的发生可能会引发一系列严重后…

Selenium + Django + Echarts 实现亚马逊商品数据可视化爬虫项目

最近完成了1个爬虫项目&#xff0c;记录一下自己的心得。 项目功能简介 根据用户输入商品名称、类别名称&#xff0c;使用Selenium, BS4等技术每天定时抓取亚马逊商品数据&#xff0c;使用Pandas进行数据清洗后保存在MySql数据库中. 使用Django提供用户端功能&#xff0c;显…

【electron】安装网络问题处理

目录 场景排查问题排查结论electron 安装失败解决方案 新的问题electron-builder 打包失败处理 场景 在mac上使用electron进行代码开发的时候&#xff0c;无法正常下载与electron、electron-builder相关的依赖 排查问题 是不是因为没有翻墙导致资源无法下载是不是没有设置正…

MC3172 串口模块

MC3172 支持12个串口对应关系如下 串口模块初始化 第一个是uart0~11 inpin RX 脚 管脚号 outpin TX脚 管脚号 baud 波特率 read_ptr ,数据读取指针 void uart_init(u32 uart_num,u8 in_pin,u8 out_pin,u32 baud,u8* read_ptr) {INTDEV_SET_CLK_RST(uart_num,(INTDEV_RUN|…

HCIP-三层架构实验

实验拓扑 实验需求 实验思路 配置IP地址 链路聚合 vlan配置 配置生产树 实验步骤 配置IP地址 以R1为例 <Huawei>sys [Huawei]sys r1 [r1]int g0/0/02 [r1-GigabitEthernet0/0/2]ip address 12.1.1.1 24 Jan 28 2024 17:09:03-08:00 r1 %%01IFNET/4/LINK_STATE(l…

一天吃透面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创…

vue中使用jweixin-module

目录 一&#xff1a;安装jweixin-module 二&#xff1a;后端配置 三&#xff1a;获取签名并注入配置 四&#xff1a;调用微信JS接口 在Vue项目中使用jweixin-module&#xff08;或通常称为jweixin&#xff0c;即微信JS-SDK的封装&#xff09;来调用微信提供的JS接口&#x…

二叉树

目录 1翻转二叉树 2对称二叉树 3二叉树的深度 最大深度 最小深度 4二叉树的结点数量 完全二叉树的结点数量 5平衡二叉树 6 中序 后序求前序 二叉树结构体如下&#xff1a; struct freenode {int data;struct freenode *lchild, *rchild;//左孩子 右孩子 }T; 1翻转二…

每日OJ题_算法_前缀和②_牛客DP35 【模板】二维前缀和

目录 二维前缀和原理 ②牛客DP35 【模板】二维前缀和 解析代码 二维前缀和原理 在一维数组前缀和算法的基础上&#xff0c;想到&#xff1a;计算二维数组前缀和&#xff0c;不就和计算一维数组前缀和一样&#xff0c;即计算每一个位置的前缀和就相当于&#xff1a; 此位置的…

VUE引入DataV报错记录

DataV官网&#xff08;不支持Vue3&#xff09;&#xff1a;Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

【Matlab】音频信号分析及FIR滤波处理——凯泽(Kaiser)窗

一、前言 1.1 课题内容: 利用麦克风采集语音信号(人的声音、或乐器声乐),人为加上环境噪声(窄带)分析上述声音信号的频谱,比较两种情况下的差异根据信号的频谱分布,选取合适的滤波器指标(频率指标、衰减指标),设计对应的 FIR 滤波器实现数字滤波,将滤波前、后的声音…

贪吃蛇/链表实现(C/C++)

本篇使用C语言实现贪吃蛇小游戏&#xff0c;我们将其分为了三个大部分&#xff0c;第一个部分游戏开始GameStart&#xff0c;游戏运行GameRun&#xff0c;以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现&#xff0c;但若仅仅只有C语言的知识还不够&#xff0c;我们还…

学习笔记推荐:极客时间《Java常见错误100例》

最近&#xff0c;我有幸接触了一套非常精彩的学习笔记&#xff0c;《Java常见错误100例》。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 这套学习笔记出自极客时间&#xff0c;对于想要在 Java 开发领域深耕细作的朋友们来说&#xff0c;它无…