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

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

数据准备

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

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

相关文章
|
SQL 前端开发 JavaScript
eggjs 怎么实现获取账单列表接口并且实现列表数据分页查询功能?
eggjs 怎么实现获取账单列表接口并且实现列表数据分页查询功能?
196 0
eggjs 怎么实现获取账单列表接口并且实现列表数据分页查询功能?
|
6月前
|
Java 关系型数据库 数据库连接
Hasor【环境搭建 02】Dataway接口配置服务使用DataQL聚合查询引擎(Mybatis执行器实现分页查询举例说明+问题分析)
Hasor【环境搭建 02】Dataway接口配置服务使用DataQL聚合查询引擎(Mybatis执行器实现分页查询举例说明+问题分析)
177 0
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践(2)
|
SQL Java 数据库连接
掌握 MyBatis <choose>标签:优化动态查询条件的利器
当谈到在Java应用程序中进行数据库访问时,MyBatis 是一个备受欢迎的持久层框架。它的强大之处在于提供了灵活性和可定制性,使得数据库操作变得更加简便。在这篇文章中,我们将深入介绍 MyBatis 中的`&lt;choose&gt;` 标签,它是一个有趣且功能强大的元素,用于在 SQL 映射文件中进行条件选择。
364 0
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
本篇文章讲解的主要内容是:***ROLLUP、UNION ALL是如何分别做分组合计的以及如何通过CUBE 、GROUPING、GROUPING_ID 识别哪些行是做汇总的结果行***
【SQL开发实战技巧】系列(二十六):数仓报表场景☞聊聊ROLLUP、UNION ALL是如何分别做分组合计的以及如何识别哪些行是做汇总的结果行
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践
FluentMybatis 聚合查询、apply方法 | FluentMybatis实践
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)