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的值填充到实体对象中。

相关文章
|
19天前
|
Java 关系型数据库 数据库连接
Hasor【环境搭建 02】Dataway接口配置服务使用DataQL聚合查询引擎(Mybatis执行器实现分页查询举例说明+问题分析)
Hasor【环境搭建 02】Dataway接口配置服务使用DataQL聚合查询引擎(Mybatis执行器实现分页查询举例说明+问题分析)
90 0
|
19天前
|
Oracle Java 关系型数据库
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
35 0
|
7月前
|
SQL
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
|
10月前
|
SQL Java 数据库连接
掌握 MyBatis <choose>标签:优化动态查询条件的利器
当谈到在Java应用程序中进行数据库访问时,MyBatis 是一个备受欢迎的持久层框架。它的强大之处在于提供了灵活性和可定制性,使得数据库操作变得更加简便。在这篇文章中,我们将深入介绍 MyBatis 中的`&lt;choose&gt;` 标签,它是一个有趣且功能强大的元素,用于在 SQL 映射文件中进行条件选择。
148 0
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
本篇文章讲解的主要内容是:***ROLLUP、UNION ALL是如何分别做分组合计的以及如何通过CUBE 、GROUPING、GROUPING_ID 识别哪些行是做汇总的结果行***
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
本篇文章讲解的主要内容是:***如何使用lag函数让结果集重复数据只显示一次、用行转列pivot写法优化部门之间计算工资差异类似需求、如何通过ceil函数对已有数据进行分组打印、放假安排团队分组值班,如何通过ntile()over(order by )快速进行人员分组***
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
FluentMybatis Update语法 | FluentMybatis实践
FluentMybatis Update语法 | FluentMybatis实践
FluentMybatis Update语法 | FluentMybatis实践
FluentMybatis Where语法(一) | FluentMybatis实践(2)
FluentMybatis Where语法(一) | FluentMybatis实践
FluentMybatis Where语法(一) | FluentMybatis实践(2)
FluentMybatis Where语法(一) | FluentMybatis实践(3)
FluentMybatis Where语法(一) | FluentMybatis实践
FluentMybatis Where语法(一) | FluentMybatis实践(3)