温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-03-04 14:22:59 来源:亿速云 阅读:216 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关Java Fluent Mybatis聚合查询与apply方法流程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

数据准备

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

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聚合函数的时候,我来搞复杂一点,加上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);     }   }

调试代码

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

OK,没什么问题。

代码说明:

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

SUM、AVG、COUNT

sum、avg、count加一起试试吧。

定义返回体

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方法流程的示例分析

OK,完美。

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方法流程的示例分析

OK,完美。

关于“Java Fluent Mybatis聚合查询与apply方法流程的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI