FluentMybatis 聚合查询、apply方法 | FluentMybatis实践

简介: FluentMybatis 聚合查询、apply方法 | FluentMybatis实践

前言

接着上一篇文章:FluentMybatis 分页查询、sql日志输出 | FluentMybatis实践_阿良的博客-CSDN博客

我把分页已经调整好了,现在实验一下官方给出的聚合查询方法。

GitHub代码仓库:GitHub仓库



数据准备

为了聚合查询的条件,添加了几条数据。

image.png

MIN

我们试着获取最小的年龄

方法实现

  @Override
  public Integer getAgeMin() {
    Map<String, Object> result =
        testFluentMybatisMapper
            .findOneMap(new TestFluentMybatisQuery().select.min.age("minAge").end())
            .orElse(null);
    return result != null ? Convert.toInt(result.get("minAge"), 0) : 0;
  }

控制层代码

  @ApiOperation(value = "获取最小年龄", notes = "获取最小年龄")
  @RequestMapping(value = "/getAgeMin", method = RequestMethod.GET)
  @ResponseBody
  public Result<Integer> getAgeMin() {
    try {
      return Result.ok(aggregateService.getAgeMin());
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }

调试代码


image.png


代码说明:


1、age("minAge")为什么要加一个字符串进去呢?不加可以吗?答案是可以,不过你看到的结果返回时这样的。


image.png



没错,括号内的是聚合查询结果别名,不传的话结果比较尴尬,建议还是传一下。


MAX

在做max聚合函数的时候,我来搞复杂一点,加上group by。


定义返回实体。


import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/** @Author huyi @Date 2021/10/26 14:15 @Description: 聚合最大年龄返回体 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AggregateMaxAgeRsp {
  private String name;
  private Integer maxAge;
}

方法实现

  @Override
  public List<AggregateMaxAgeRsp> getAgeMaxByName() {
    List<Map<String, Object>> result =
        testFluentMybatisMapper.listMaps(
            new TestFluentMybatisQuery()
                .select
                .name()
                .max
                .age("maxAge")
                .end()
                .groupBy
                .name()
                .end());
    if (result != null && result.size() != 0) {
      List<AggregateMaxAgeRsp> list = new ArrayList<>();
      result.forEach(
          x -> list.add(BeanUtil.fillBeanWithMapIgnoreCase(x, new AggregateMaxAgeRsp(), false)));
      return list;
    } else {
      return null;
    }
  }

控制层代码

  @ApiOperation(value = "根据年龄分组并获取最大年龄", notes = "根据年龄分组并获取最大年龄")
  @RequestMapping(value = "/getAgeMaxByName", method = RequestMethod.GET)
  @ResponseBody
  public Result<List<AggregateMaxAgeRsp>> getAgeMaxByName() {
    try {
      return Result.ok(aggregateService.getAgeMaxByName());
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }


调试代码

image.png


OK,没什么问题。

代码说明:

1、使用了Hutools工具BeanUtil将map的值填充到实体对象中。

相关文章
|
5月前
|
弹性计算 测试技术 对象存储
2026年阿里云新用户购买云服务器活动解析:免费试用、抢购活动、云服务器特价及热门实例折扣
2026年阿里云为新用户推出免费试用与云服务器特惠活动。新用户可免费试用160+云产品,试用结束后仍享新用户优惠价。此外,还有轻量应用服务器抢购和云服务器低价长效特惠,配置从2核2G到2核4G不等,价格低至38元/年。热门实例有折扣,满足企业级与高性能需求。同时,阿里云还为新用户提供迁云补贴券、出海补贴券、无门槛优惠券等,降低购买成本。
|
11月前
|
NoSQL 数据可视化 Redis
redis数据导出和导入最佳实践
redis的导出和导入,有可视化工具,也有命令行工具,这里,我们当然是要选可视化工具,命令行工具安装也麻烦,使用也麻烦,直接pass掉。 这里我是推荐使用yunedit-redis来做导出和导入,其一是因为它的导出和导入非常类型,可以导出整库、还可以导出单个db,还可以只导出几个key、甚至可以使用它的自定义导出功能根据正侧表达式导出符合规则的key的数据
|
2月前
|
人工智能 前端开发 小程序
AI 编程工具排名 2026:7 款主流横评(国产 + 海外实测)
AI 编程工具有哪些?哪个 AI 写代码最强?2026 年 AI 编程工具排名横评:Cursor、Bolt.new、Lovable、v0、秒悟 Meoo、通义灵码。从场景适配度、价格、商用合规、中文支持 6 个维度实测。
9041 0
|
JavaScript 前端开发 应用服务中间件
在centos7.x上安装配置nginx
本文介绍了两种安装和配置Nginx的方法。第一种方法通过Yum源安装,包括安装`yum-utils`工具、添加Nginx源、安装Nginx并启动服务,最后部署了一个JavaScript飞机大战项目进行测试。第二种方法为源码编译安装,涵盖依赖包安装、创建用户、下载与解压Nginx源码、配置编译参数、编译安装及启动服务等步骤,并验证了Nginx的访问功能。两种方法各有优劣,可根据实际需求选择适合的方式。
|
Web App开发 搜索推荐 安全
油猴离线安装文件下载,tampermonkey离线安装包下载
油猴脚本(Tampermonkey)是一款强大的浏览器扩展,允许用户通过自定义脚本增强网页功能。支持广告过滤、网盘直链下载、页面优化等多种用途,适用于Chrome、Firefox等主流浏览器。本文提供离线安装包下载及常用插件清单,助你轻松提升浏览效率与体验。
16763 6
|
人工智能 自然语言处理 Linux
如何获取 OpenAI API 密钥
本教程详细介绍如何注册 OpenAI 账户、获取 API 密钥并部署 GPT-4 模型。内容涵盖访问官网、登录注册、创建密钥、配置 Python 环境及调用 API 的完整流程,并提供示例代码帮助开发者快速上手。
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-容量调度器(Yahoo!的Capacity Scheduler)
详细讲解了Hadoop YARN资源管理中的容量调度器(Yahoo!的Capacity Scheduler),包括队列和子队列的概念、Apache Hadoop的容量调度器默认队列、队列的命名规则、分层队列、容量保证、队列弹性、容量调度器的元素、集群如何分配资源、限制用户容量、限制应用程序数量、抢占申请、启用容量调度器以及队列状态管理等方面的内容。
897 3
|
资源调度 流计算 Docker
死磕flink(七)
死磕flink(七)
|
存储 测试技术 Linux
Docker技术仓库
本文详细介绍了Docker中数据卷的作用、特点、管理方式,包括bindmounts和volumes挂载、Dockerfile中的数据卷使用、Docker仓库(公有与私有)以及DockerCompose在多容器应用中的应用。
|
传感器 机器学习/深度学习 弹性计算
Agent与大模型的区别
本文详细对比了人工智能领域的两个重要概念——Agent和大模型。大模型如GPT-3、BERT等,擅长自然语言处理任务,如文本生成、翻译等;Agent则是自主的软件实体,能够在特定环境中感知、决策并执行任务,如管理日程、控制智能家居等。文章介绍了它们的定义、功能、技术架构及应用场景,并总结了两者的核心差异和未来发展方向。
15262 26