zoukankan      html  css  js  c++  java
  • 基于 r2dbc jpa java reactor流式编程的查询合并

    前言: 这算是我编写 java reactor时候的工作小结了。

    有表如下:

    TableMapping 如下

    mapping_id table_type search
    100 A 1
    100 B 1
    200 B 2

    TableA 如下

    id name sex
    100 张三
    200 李四

    TableB 如下

    id school grade
    100 一中 高一
    200 一中 高二
    需求: 根据TableMapping.search, 结合TableATableB,查询出详细数据,也就是
    // 例如查询 search = 1 
    {
    	"name":"张三",
    	"sex":"男",
    	"school":"一中",
    	"grade":"高一"
    }
    
    操作方式
            List<FluxToMono> initData = new ArrayList<>();
            return tableMappingRepository.findAllBySearchEquals(1)
                    .reduce(initData, (rd, next) -> {
                        rd.add(new FluxToMono(next.getTableType(), next.getMappingId()));
                        return rd;
                    })
                    .flatMap(fMap -> {
                        FluxToMono aFilter = fMap.stream().filter(f -> DeviceTypeEnum.A.getCode().equals(f.getTableType())).findFirst().orElse(FluxToMono.builder().build());
                        Mono<TableA> a = tableARepository.findFirstById(aFilter.getMappingId());
    
                        FluxToMono bFilter = fMap.stream().filter(f -> DeviceTypeEnum.B.getCode().equals(f.getTableType())).findFirst().orElse(FluxToMono.builder().build());
                        Mono<NoiseMessageRecord> b = tableBRepository.findFirstById(bFiltert.getMappingId());
    
                        return Mono.zip(
    					a.defaultIfEmpty(TableA.builder().build()),
    					b.defaultIfEmpty(TableB.builder().build()),
    					(lambdaA, lambdaB) ->
    					ShowDataVo.builder()
    						.name(lambdaA.getName())
    						.sex(lambdaA.getSex())
    						.school(lambdaB.getSchool())
    						.grade(lambdaB.getgrade())
    					.build());
                    });
    

    知识点:

    • Mono.zip 只认识有值,只要有一个无值就无输出
    • flatMap 要比 map调用要好,毕竟响应式编程还是要符合规范
  • 相关阅读:
    C#中的Virtual
    DevExpress控件中LayoutControl的使用
    汉字获取首字母拼音
    工具类
    C# 根据时间创建文件夹
    图片延迟加载
    IIS日志分析的作用
    SQL2008R2 无法读取此系统上以前注册的服务器的列表--网上方法不可行
    windows 服务器系统日志分析及安全
    301跳转
  • 原文地址:https://www.cnblogs.com/akashicbrother/p/15134054.html
Copyright © 2011-2022 走看看