# 2.0 chain 使用方式

//      原模型 增加 @JoinChainModel 注解 
//      生成规则是 原模型名称后+ Chain 比如说 原模型名字叫 Users 生成的类就叫做 UsersChain
        UsersChain usersChain = UsersChain.create();
        UsersAgeChain ageChain = UsersAgeChain.create();
        
//        注意字段定义 _Field 开头的代表是单个字段,一般用在单个类型定义的时候
//        例如:.eq(usersChain._ageId(),1)
        Joins.chain(usersChain)
                .selectAs(() -> {
                    return usersChain.userId().userName().createTime()
                                        .to(ageChain) // 代表转移到另外一个chain模型
                                        .ageDoc().ageName().id();
                            })
                .leftJoin(ageChain._id(), usersChain._ageId())
//                joinand 第一个参数为需要进行 joinAnd的 子表Chain 模型
                .joinAnd(ageChain, (w) -> w.eq(ageChain._id(1)))
               .joinList(UsersVo.class);

// 生成SQL
        SELECT
            users.user_id,
            users.user_name,
            users.create_time,
            users_age.age_doc,
            users_age.age_name,
            users_age.id
        FROM
            users AS users
        LEFT JOIN users_age AS users_age ON users_age.id = users.age_id
        AND ( users_age.id = 1 )

# lambda使用方式

# joinAnd() join添加条件(1.3.4版本后可根据Wrapper设定条件)

相信有很多情况需要限制join的表的限制条件那么就需要

joinAnd(SFunction<T, Object> field, Object val, int index)

WARNING

需要注意啊,这个最后一个下标是指的第几个join,因为有时候会出现多个连接,附表连接主表,附表的附表连接附表这样子 不过一般都是0


JoinLambdaWrapper<Users> wrapper = new JoinLambdaWrapper<>(Users.class);
wrapper.leftJoin(UsersAge.class,UsersAge::getId,Users::getAgeId)
  	.joinAnd(UsersAge::getId,1,0) 
  	.eq(UserAge::getAgeName,"95")
  	.selectAs((cb) -> {
      cb.add(UserAge::getAgeName,"user_age_name")
        .add(UserAge::getAgeDoc)
        .add("mp永远滴神","mpnb");
    }).end();
// 执行查询
usersService.joinList(wrapper,UsersVo.class);

// 执行SQL 
select 
    users.user_id,
	users.user_name,
	users_age.age_name as user_age_name,
	users_age.age_doc,
	'mp永远滴神' as mpnb
from users users
  left join users_age users_age on users_age.id = users.age_id and users_age.id = 1
where (
	users_age.age_name = '95'
)
 

1.3.4版本后写法


    Joins.of(Users.class)
                .masterLogicDelete(false)
                .pushLeftJoin(UsersVo::getUsersAge, UsersAge.class)
    			.joinAnd(0, w -> w.eq(UsersAge::getId, Users::getAgeId)
                                            .ne(UsersAge::getId, 10))
                .isNotNull(UsersAge::getId).end()
				.joinList(UsersVo.class)
    
 // 执行SQL
    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 and (t1.id = users.age_id AND t1.id <> 10) WHERE (t1.id IS NOT NULL)