>  기사  >  Java  >  Java Fluent Mybatis 집계 쿼리 및 메소드 적용 프로세스 예시 분석

Java Fluent Mybatis 집계 쿼리 및 메소드 적용 프로세스 예시 분석

WBOY
WBOY앞으로
2023-05-22 13:31:061464검색

데이터 준비

쿼리 조건을 집계하기 위해 여러 데이터가 추가되었습니다.

Java Fluent Mybatis聚合查询与apply方法流程的示例分析

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);
    }
  }

디버깅 코드

Java Fluent Mybatis聚合查询与apply方法流程的示例分析

코드 설명:

1 왜 age("minAge")에 문자열을 추가해야 하나요? 추가하지 않아도 괜찮나요? 대답은 '예'입니다. 하지만 반환된 결과는 다음과 같습니다.

Java Fluent Mybatis聚合查询与apply方法流程的示例分析

그렇습니다. 괄호 안은 집계 쿼리 결과의 별칭입니다. 통과하지 않으면 당황스러운 결과가 됩니다.

MAX

max 집계 함수를 할 때 좀 더 복잡하게 만들고 그룹바이를 추가하겠습니다.

반품 엔터티를 정의합니다.

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);
    }
  }

디버그 코드

Java Fluent Mybatis聚合查询与apply方法流程的示例分析

네, 문제 없습니다.

코드 설명:

1. Hutools 도구 BeanUtil을 사용하여 맵 값을 엔터티 개체에 채웁니다.

SUM, AVG, COUNT

sum, avg, count plus를 함께 해보세요.

반환 본문 정의

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
 
/** @Author huyi @Date 2021/10/26 14:50 @Description: 聚合平均总和返回体 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AggregateAgeSumAvgAndCountRsp {
  private String name;
  private Integer sum;
  private Integer avg;
  private Integer count;
}

메서드 구현

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

컨트롤 레이어 코드

  @ApiOperation(value = "根据年龄分组并获取年龄和、平均年龄、数量", notes = "根据年龄分组并获取年龄和、平均年龄、数量")
  @RequestMapping(value = "/getAgeSumAvgCountByName", method = RequestMethod.GET)
  @ResponseBody
  public Result<List<AggregateAgeSumAvgAndCountRsp>> getAgeSumAvgCountByName() {
    try {
      return Result.ok(aggregateService.getAgeSumAvgCountByName());
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }

디버그 코드

Java Fluent Mybatis聚合查询与apply方法流程的示例分析

좋아요, 완벽해요.

apply 메소드 사용

자유롭게 지정된 필드를 표시할 수 있는 .apply 구문 기능을 공식적으로 제공합니다. 작동하는지 아닌지 테스트해 봅시다.

반환 본문 정의

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
 
import java.util.Date;
 
/** @Author huyi @Date 2021/10/26 15:10 @Description: 聚合应用返回体 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AggregateApplyRsp {
  private String name;
  private Date createTime;
  private Integer minAge;
  private Date maxTime;
}

메서드 구현

  @Override
  public List<AggregateApplyRsp> getApply() {
    List<Map<String, Object>> result =
        testFluentMybatisMapper.listMaps(
            new TestFluentMybatisQuery()
                .select
                .apply("name")
                .createTime("createTime")
                .apply("min(age) as minAge", "max(create_time) as maxTime")
                .end()
                .groupBy
                .name()
                .createTime()
                .end());
    if (result != null && result.size() != 0) {
      List<AggregateApplyRsp> list = new ArrayList<>();
      result.forEach(
          x -> list.add(BeanUtil.fillBeanWithMapIgnoreCase(x, new AggregateApplyRsp(), false)));
      return list;
    } else {
      return null;
    }
  }

컨트롤 레이어 코드

  @ApiOperation(value = "根据名字获取最小年龄,使用语句", notes = "根据名字获取最小年龄,使用语句")
  @RequestMapping(value = "/getApply", method = RequestMethod.GET)
  @ResponseBody
  public Result<List<AggregateApplyRsp>> getApply() {
    try {
      return Result.ok(aggregateService.getApply());
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }

디버그 코드

Java Fluent Mybatis聚合查询与apply方法流程的示例分析

좋아요, 완벽해요.

위 내용은 Java Fluent Mybatis 집계 쿼리 및 메소드 적용 프로세스 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제