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……