【Mybatis-plus-join】 push_join 和 @JoinField

Metadata

title: 【Mybatis-plus-join】 push_join 和 @JoinField
date: 2023-01-22 18:58
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Mybatis-plus-join
categories:
  - Mybatis-plus-join
keywords:
  - Mybatis-plus-join
description: 【Mybatis-plus-join】 push_join 和 @JoinField

【Mybatis-plus-join】 push_join 和 @JoinField

第一步 在查询返回的模型中添加对象或者集合

// 第一步 在查询返回的模型中添加对象或者集合
// 注解参数
  // 主表对象class   
  masterModelClass();
  // 子表对象class
  sunModelClass();
  // 主表关联字段,注意不要写别名啥的,就写实体类中的属性名
  masterModelField();
  // 子表关联字段,注意不要写别名啥的,就写实体类中的属性名
  sunModelField();
  // 子表别名,如果你关联的对象中有两个相同的表,就需要显示填写一下别名,否则不用写
  sunAlias() default "";
  // 关联类型
  relevancyType();
@JoinField(masterModelClass = Users.class, masterModelField = "ageId",
            sunModelClass = UsersAge.class, sunModelField = "id", relevancyType = RelevancyType.ONT_TO_ONE,
            sunAlias = "t1")
private UsersAge usersAge;

@JoinField(masterModelClass = Users.class, masterModelField = "ageId",
            sunModelClass = UsersAge.class, sunModelField = "id", relevancyType = RelevancyType.MANY_TO_MANY,
            sunAlias = "t2")
private List<UsersAge> usersAges;

添加完注解之后,就可以用push*Join方法,添加进去

pushLeftJoin(UsersVo::getUsersAge) 
 
 List<UsersVo> list = Joins.of(Users.class)
                .pushLeftJoin(UsersVo::getUsersAge)
                .joinList(UsersVo.class);

如果你添加完这个join之后,还需要再添加条件之类的

 List<UsersVo> list = Joins.of(Users.class)
                               // 就需要用该参数,指定一下构建的泛型class
                .pushLeftJoin(UsersVo::getUsersAge, UsersAge.class)
                               .eq(UsersAge::getId, Users::getAgeId).end()
                .joinList(UsersVo.class);
SELECT 
  users.user_name,users.create_time,users.age_id,users.content_json,users.user_id, t1.age_doc as t1_ageDoc , t1.age_name as t1_ageName , t1.create_time as t1_createTime , t1.content_json_age as t1_contentJsonAge , t1.id as t1_id 
  FROM users as users 
  LEFT JOIN users_age as t1 ON t1.id = users.age_id
// 返回对象
UsersVo(....
        usersAge=UsersAge(id=1, ageDoc=90, ageName=90, createTime=Fri Dec 17 13:11:11 CST 2021, contentJsonAge=TestUserJson(name=456, content=呜呜呜)))