Easy Trans

项目地址:https://gitee.com/dromara/easy_trans

某些属性需要通过关联查询来得到,一种是通过查询时进行 JOIN 查询,现在也可以使用 Easy Trans 库进行自动关联查询。

对应类首先需要实现 com.fhs.core.trans.vo.VO 接口,如:

public class WalletRechargeRespVO implements VO {

    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "30268")
    @ExcelProperty("编号")
    private Long id;

    @Schema(description = "会员钱包 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8014")
    @ExcelProperty("会员钱包 id")
    @Trans(type = TransType.SIMPLE, target = PayWalletDO.class, fields = {"userId"}, refs = {"userId"})
    private Long walletId;

    @Trans(type = TransType.SIMPLE,
            targetClassName = "cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO",
            fields = {"nickname", "mobile"},
            refs = {"userNickname", "userMobile"},
            sort = 1)
    private Long userId;

    private String userNickname;

    private String userMobile;
}

如在一个充值记录中,关联了用户的ID,需要同时查询对应的用户名:

    @Trans(
            type = TransType.SIMPLE,
            target = MemberUserDO.class,
            fields = {"nickname", "mobile"},
            refs = {"userNickname", "userMobile"})
    private Long userId;

通过在属性字段 userId 加使用 @Trans 注解,通过 targetClassName 指定要关联的表对应的实体类;fields 指定关联类的指定字段:如通过userId 想查询会员的名称和手机号;refs 将指定字段的值设置到本类中的指定属性里。

refs 也可以不指定,这样会自动生成一个 transMap 以保存关联的值。

如果某些原因,如分了模块又因为循环依赖不能直接引用对应的类,可使用名称来指定:

@Trans(type = TransType.SIMPLE,
            targetClassName = "com.deluim.member.MemberUserDO",
            fields = {"nickname", "mobile"},
            refs = {"userNickname", "userMobile"})
    private Long userId;

对于多个表之间的关联,如当前表只关联了钱包 ID ,又要通过钱包表关联用户 ID 以获得用户信息,可以通过添加 sort 属性,来依次关联。

什么是级联翻译

 @Trans(type = TransType.SIMPLE, 
            target = PayWalletDO.class, 
            fields = {"userId"}, 
            refs = {"userId"})
    private Long walletId;

    @Trans(type = TransType.SIMPLE,
            targetClassName = MemberUserDO.class,
            fields = {"nickname", "mobile"},
            refs = {"userNickname", "userMobile"},
            sort = 1)
    private Long userId;

Easy Trans 和 Mybatis Plus Join

Wrapper 操作惯了还是比较好用,相比于 xml 定义,有时候新增修改字段之类的,要简单一些。

通过 com.github.yulichang.wrapper.MPJLambdaWrapper 来实现 join 操作:

MPJLambdaWrapper wrapper = new MPJLambdaWrapper()
                .leftJoin(Role.class, Role::getId, User::getRoleId)
                .leftJoin("role r on r.id = t1.role_id");

可以通过 class 关联,或是手写表名进行关联,默认主表别名为 t ,其他的默认一次 t1, t2……

Tagged in: