MybatisPlus Lambda表达式 聚合查询 分组查询 COUNT SUM AVG MIN MAX GroupBy
一、序言
众所周知,MybatisPlus在处理单表DAO操作时非常的方便。在处理多表连接连接查询也有优雅的解决方案。今天分享MybatisPlus基于Lambda表达式优雅实现聚合分组查询。
由于视频的交互性更强,保留更多的细节,看视频的朋友,传送门在这里。
下面的内容是博客文字版。
二、代码实现
1、用户实体类
@TableName(value = "tb_user")
public class User {
private static final long serialVersionUID = 1L;
private Integer age;
private Long deptId;
@TableId(type = IdType.AUTO)
private Long userId;
private String userName;
public User(User user) {
if (Objects.nonNull(user)) {
this.age = user.age;
this.deptId = user.deptId;
this.userId = user.userId;
this.userName = user.userName;
}
}
}
2、用户聚合类
本类属于核心代码
@TableName(value = "tb_user")
public class UserAggr {
private Long deptId;
/**
* 新增的一列数据 用于存储count字段
* 注解非常关键
*/
@TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
private Long count;
public UserAggr(UserAggr user) {
if (Objects.nonNull(user)) {
this.deptId = user.deptId;
this.count = user.count;
}
}
}
3、用户聚合类VO
本类属于核心代码
public class UserAggrVo extends UserAggr {
private String deptName;
/**
* 很重要构造器
*
* @param user
*/
public UserAggrVo(UserAggr user) {
super(user);
}
}
4、服务层调用
服务层完成调用
public List<UserAggrVo> selectList3() {
LambdaQueryWrapper<UserAggr> wrapper = Wrappers.lambdaQuery(UserAggr.class)
.select(UserAggr::getDeptId, UserAggr::getCount)
.groupBy(UserAggr::getDeptId);
List<UserAggr> userAggrList = userAggrMapper.selectList(wrapper);
List<UserAggrVo> userAggrVoList = EntityUtils.toList(userAggrList, UserAggrVo::new);
// 给deptName完成属性赋值
Set<Long> deptIds = EntityUtils.toSet(userAggrVoList, UserAggrVo::getDeptId);
if (deptIds.size() > 0) {
List<Dept> deptList = deptMapper.selectList(Wrappers.lambdaQuery(Dept.class)
.in(Dept::getDeptId, deptIds));
Map<Long, String> map = EntityUtils.toMap(deptList, Dept::getDeptId, Dept::getDeptName);
for (UserAggrVo userAggrVo : userAggrVoList) {
userAggrVo.setDeptName(map.get(userAggrVo.getDeptId()));
}
}
return userAggrVoList;
}
5、效果展示
{
"code": 200,
"msg": "操作成功",
"data": [
{
"deptId": "10",
"count": "1",
"deptName": "Java"
},
{
"deptId": "11",
"count": "2",
"deptName": "Mysql"
},
{
"deptId": "12",
"count": "3",
"deptName": "Tomcat"
}
]
}
三、总结
本方案很好的实现了MybatisPlus基于Lambda表达式实现聚合操作,代码在形式上与单表保持统一,代码优雅。各位看官朋友点赞支持一波。
MybatisPlus Lambda表达式 聚合查询 分组查询 COUNT SUM AVG MIN MAX GroupBy的更多相关文章
- Django聚合与分组查询中value与annotate的顺序问题
在学习Django聚合与分组查询中,发现value与annotate的顺序不同时,查询结果大相径庭,经过一下午的研究,终于弄明白了,现在分享给大家,先上结论: 结论 value在annotate前面时 ...
- Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...
- Lambda表达式与标准运算符查询
class Program { static void Main(string[] args) { //Lambda表达式输出List集合每一项 List<string> list = n ...
- python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
- (转)python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
- Django基础(5) ----基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...
- Solr.NET快速入门(五)【聚合统计,分组查询】
聚合统计 属性 说明 Min 最小值 Max 最大值 Sum 总和 Count 记录数,也就是多少行记录 Missing 结果集中,有多少条记录是空值 SumOfSquares 平方和(x1^2 + ...
- Django-ORM之聚合和分组查询、F和Q查询、事务
聚合查询 聚合对查询的结果进行一步的计算加工. aggregate()是QuerySet 的一个终止子句 ,他的作用是,返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键 ...
- Django 多表、跨表、聚合、分组查询
前期准备: 创建表 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalFi ...
随机推荐
- Python条件语句的用法
python条件语句使用 if 表达式,难度不高,需要注意的是嵌套用法,以及如何设置对应的条件. if 条件判断语句 python 语句是按固定顺序执行的,先执行前面的语句,再执行后面的语句.如果你像 ...
- SpringBoot 整合 MongoDB 实战介绍
一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...
- docker容器数据卷的使用
什么是容器数据卷 docker的理念回顾 将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求,是希望能够持久化的! 就好比,你安装一个MySQL,结果你把容器删了,就相当于 ...
- hadoop 文件参数配置
准备环境(省略) 上传实验所需的压缩包 配置网络信息 修改主机名 配置域名解析 关闭防火墙与SELinux(在所有节点上执行)代码如下: systemctl disable --now firewal ...
- 关于MicroPython mpremote工具 的一些用例,闲聊
关于MicroPython mpremote工具 的一些用例,闲聊 我尝试了很多不同的第三方micropython工具,有些是Windows应用程序,有些是VScode插件. 但是当我尝试过Micro ...
- 【设计模式】Java设计模式 - 装饰者模式
Java设计模式 - 装饰者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自 ...
- Web 开发相关概念
Web 开发相关概念 前端 后端 全栈 前端 Front-end:网站中用户看到的部分 HTML CSS JavaScript 库和框架 设计工具 后端 Back-end:网站中用户看不到的部分 编程 ...
- Linkerd、Consul、Istio、Kuma、Traefik、AWS App服务网格全方位对比
- 如何从Django项目中删除或隐藏应用
1.项目的settings.py文件 INSTALLED_APPS中删除或者注释掉,这是针对数据库这一块儿的 2.项目的urls.py文件 删除或这注释掉应用的路径导入 urlpatterns中删除或 ...
- Gitlab添加K8S集群
介绍如何在Gitlab项目中添加K8S集群,以便使用K8S集群部署gitlab-runner帮我们运行gitlab的CI/CD. 参考官方文档:https://docs.gitlab.com/ee/u ...