ORM中的一对一,一对多
JPA 中 一对一,一对多 都是在实体类中配置的 ,这就导致很尴尬,很多时候 我们并不需要,只能设置懒延迟了,有时候 我们又想它不要懒延迟,不然后 每次都要手动去调一下,然后JSON 或者 模板里就会报错;灵活性不高;当然可能我没理解透彻!!!
mybatis-mp是如何做的,如何设计一对一,一对多的?
mybatis-mp的设计更为简单,实体类就是表的信息,不包含 一对一,一对多关系;一对一,一对多的关系表现在你的查询结果上(作者的理解是你的查询是多样性的)
第1步 创建VO类
@Data
@ResultEntity(SysUser.class)
public class FetchSysUserVo {
private Integer id;
private String userName;
private String password;
@Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id")
private SysRoleVo sysRole;
private LocalDateTime create_time;
}
SysRoleVo sysRole 也可以是直接是实体类SysRole
第2步 查询
QueryChain.of(sysUserMapper)
.select(FetchSysUserVo.class)
.from(SysUser.class)
.eq(SysUser::getId, 2)
.returnType(FetchSysUserVo.class)
.list();
select(FetchSysUserVo.class) 自动帮你select 所需要的列
returnType(FetchSysUserVo.class) 设置你结果的返回类
@Fetch 执行说明
第1个SQL select from sys_user where xx
第2个SQL select from sys_role where id in (...)