@Fetch - 轮询拉取数据注解
说明
类似JPA 1对1 1对多的功能,只是此注解只能在VO/内嵌类VO里使用
属性说明
属性 | 是否可空 | 默认值 | 说明 |
---|---|---|---|
column | 是 | Fetch列,会根据此列去查,column 和 property 二选一,column优先,一般不推荐用 | |
property | 是 | Fetch 源实体类的属性,property + source + storey 组合 用于获取列 | |
source | 是 | Fetch property 对应的实体类 | |
storey | 是 | source实体类的存储层级 | |
target | 否 | 查询目标,相当于查询那个表 | |
targetProperty | 否 | 目标属性,相当于关联列 用于条件 | |
targetSelectProperty | 是 | 用于返回单列的情况,例如userName,也可动态列例如:[count(distinct {xx})] | |
orderBy | 是 | 用于结果排序 例如 "[{xx} desc,{xx2} desc]"; 其中 xx xx2 均为 实体类属性,不是列,多个逗号分割 | |
multiValueErrorIgnore | 是 | false | 1 对 1 多条时,发现多条不报错 |
limit | 是 | 0 | 默认不限制条数 |
groupBy | 是 | 用于结果排序 例如 "[{xx}],{xx2}]"; 其中 xx xx2 均为 实体类属性,不是列,多个逗号分割 | |
forceUseIn | 是 | false | 一般情况下,都是合并使用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));
}
}