跳至主要內容

关联查询 Fill

xuejmnet大约 1 分钟

easy-query提供了注解配置以外的自定义填充数据,主要是针对配置外的方法,具体api为fillOnefillMany,可以再查询时自定义关联属性(各自一个),并且支持直接select vo

说明!!!

暂时不支持proxy模式

api说明

默认fill查询结果不消费null也就是produce里面不会消费null值,如果要消费null对null处理可以在consumeNull处设置为true

<TREntity> Query<T1> fillMany(SQLFuncExpression<Query<TREntity>> fillSetterExpression, String targetProperty, String selfProperty, BiConsumer<T1, Collection<TREntity>> produce, boolean consumeNull);


<TREntity> Query<T1> fillOne(SQLFuncExpression<Query<TREntity>> fillSetterExpression, String targetProperty, String selfProperty, BiConsumer<T1, TREntity> produce, boolean consumeNull);
参数描述场景
fillSetterExpression填充数据如何查询自定义填充数据
targetProperty目标表就是fill返回的表的属性用于关联
selfProperty当前主表的属性用于关联
produce如何填充自定义填充数据
consumeNull当关联结果为null是否也会调用produce过滤null或者不过滤

说明!!!

如果希望targetPropertyselfProperty支持强类型可以通过lombok的@FieldNameConstants注解或者使用proxy模式下的CityProxy.TABLE.provinceCode().getValue(), ProvinceProxy.TABLE.code().getValue()

 List<Province> list =  easyQuery.queryable(Province.class)
                .fillMany(()->{
                    return easyQuery.queryable(City.class);
                },"provinceCode", "code", (x, y) -> {
                    x.setCities(new ArrayList<>(y));
                }).toList();


        List<City> list1 = easyQuery.queryable(City.class)
                .fillOne(()->{
                    return easyQuery.queryable(Province.class);
                },"code","provinceCode", (x, y) -> {
                    x.setProvince(y);
                })
                .toList();

vo转换

    EasyPageResult<Province> pageResult1 = easyQuery.queryable(Province.class)
                .fillMany(x -> x.consumeNull(true).with(City.class).where(y -> y.eq(City::getCode, "3306")).select(CityVO.class)//填充数据转成CityVO,
                        , "provinceCode"
                        , "code"
                        , (x, y) -> {
                            if (EasyCollectionUtil.isNotEmpty(y)) {
                                CityVO first = EasyCollectionUtil.first(y);//获取第一条city并且赋值
                                x.setFirstCityName(first.getName());
                            }
                        })
                .toPageResult(1, 10);
上次编辑于:
贡献者: Hoysing