Skip to content

@Fetch - 轮询拉取数据注解

说明

类似JPA 1对1 1对多的功能,只是此注解只能在VO/内嵌类VO里使用

属性说明

属性是否可空默认值说明
columnFetch列,会根据此列去查,column 和 property 二选一,column优先,一般不推荐用
propertyFetch 源实体类的属性,property + source + storey 组合 用于获取列
sourceFetch property 对应的实体类
storeysource实体类的存储层级
target查询目标,相当于查询那个表
targetProperty目标属性,相当于关联列 用于条件
targetSelectProperty用于返回单列的情况,例如userName,也可动态列例如:[count(distinct {xx})]
orderBy用于结果排序 例如 "[{xx} desc,{xx2} desc]"; 其中 xx xx2 均为 实体类属性,不是列,多个逗号分割
multiValueErrorIgnorefalse1 对 1 多条时,发现多条不报错
limit0默认不限制条数
groupBy用于结果排序 例如 "[{xx}],{xx2}]"; 其中 xx xx2 均为 实体类属性,不是列,多个逗号分割
forceUseInfalse一般情况下,都是合并使用in批量查询,特殊情况例如你的select列有聚合函数时会失效;符合的情况可强制使用in 查询,减少查询次数; 设置limit 时会导致失效

value 可不填写,一般在xml里映射时,才需要指定列名

使用示例

java
@Data
@ResultEntity(SysUser.class)
public class SysUserVo {

    private Integer id;

    private String userName;

    private LocalDateTime createTime;

    @Fetch(source = SysUser.class , property="roleId", target = SysRole.class, targetProperty = "id", targetSelectProperty = "roleName", orderBy = "id asc")
    private List<String> sysRoleNames;

    @Fetch(source = SysUser.class , property="roleId", target = SysRole.class, targetProperty = "id", orderBy = "id asc")
    private List<SysRole> sysRoles;
}
java
@Service
public class Test{

    @Autowired
    private SysUserMapper sysUserMapper;

    public void demo() {
        Pager<SysUserVo> pager = QueryChain.of(sysUserMapper)
                .select(SysUserVo.class)
                .eq(SysUser::getId,1)
                .like(SysUser::getUserName,"xxx")
                .returnType(SysUserVo.class)
                .paging(Pager.of(1,10));
    }
}

这样,执行查询后,它会再次去查角色表,为你拉取数据;1对1 就用VO/实体类接收;1对多 就用List<VO/实体类>接收

@Fetch 额外条件?有

java
@Service
public class Test{

    @Autowired
    private SysUserMapper sysUserMapper;

    public void demo() {
        Pager<SysUserVo> pager = QueryChain.of(sysUserMapper)
                .select(SysUserVo.class)
                .eq(SysUser::getId,1)
                .like(SysUser::getUserName,"xxx")
                //额外条件
                .fetchFilter(SysUserVo::getSysRoles, where -> {
                    where.eq(SysRole::getId, 0);
                })
                .returnType(SysUserVo.class)
                .paging(Pager.of(1,10));
    }
}