mybatis-mp 高级功能 @Fetch 实现 1对 1,1 对多

来源: 投稿
作者: Ai东
2024-06-18 10:03:00

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 (...)

展开阅读全文
点击加入讨论🔥(1) 发布并加入讨论🔥
本篇精彩评论
mybatis-mp 高级功能 @Fetch 实现 1 对 1,1 对多
2024-06-18 13:59
1
举报
1 评论
1 收藏
分享
返回顶部
顶部