# 2.0 chain 使用方式

//      原模型 增加 @JoinChainModel 注解 
//      生成规则是 原模型名称后+ Chain 比如说 原模型名字叫 Users 生成的类就叫做 UsersChain
        UsersChain usersChain = UsersChain.create();
        UsersAgeChain ageChain = UsersAgeChain.create();

//        注意字段定义 _Field 开头的代表是单个字段,一般用在单个类型定义的时候
//        例如:.eq(usersChain._ageId(),1)
        List<UsersVo> usersVoList = Joins.chain(usersChain)
                .selectAs(() -> {
                    return usersChain.userId().userName().createTime();
                })
                .leftJoin(ageChain._id(), usersChain._ageId())
//                只需要 在字段函数的入参为另一个表chain的字段函数就行了,记得 前缀 _
                .eq(ageChain._ageName(usersChain._ageId()))
                .ne(ageChain._ageName(usersChain._ageId()))
                .le(ageChain._ageName(usersChain._ageId()))
                .lt(ageChain._ageName(usersChain._ageId()))
                .ge(ageChain._ageName(usersChain._ageId()))
                .gt(ageChain._ageName(usersChain._ageId()))

                .joinList(UsersVo.class);

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

# lambda使用方式

# eq、ne..等两个表字段关联(1.3.3版本之后)

很多时候,需要两个字段去比对,所以就扩展了一下mp本来的这些基础方法

List<UsersVo> list = Joins.of(Users.class)
                .pushLeftJoin(UsersVo::getUsersAge)
                .eq(Users::getAgeId, UsersAge::getId)
                .le(Users::getAgeId, UsersAge::getId)
                .lt(Users::getAgeId, UsersAge::getId)
                .ge(Users::getAgeId, UsersAge::getId)
                .gt(Users::getAgeId, UsersAge::getId)
                .ne(Users::getAgeId, UsersAge::getId)
                .between(Users::getAgeId, UsersAge::getId, UsersAge::getAgeName)
                .notBetween(Users::getAgeId, UsersAge::getId, UsersAge::getAgeName)
                .joinList(UsersVo.class);


 // 生成SQL
SELECT
	users.user_name,
	users.create_time,
	users.age_id,
	users.content_json,
	users.user_id,
	t2.age_doc AS t2_ageDoc,
	t2.age_name AS t2_ageName,
	t2.create_time AS t2_createTime,
	t2.content_json_age AS t2_contentJsonAge,
	t2.id AS t2_id 
FROM
	users AS users
	LEFT JOIN users_age AS t2 ON t2.id = users.age_id 
WHERE
	(
		users.age_id = t2.id 
		AND users.age_id <= t2.id 
		AND users.age_id < t2.id 
		AND users.age_id >= t2.id 
		AND users.age_id > t2.id 
		AND users.age_id <> t2.id 
		AND users.age_id BETWEEN t2.id 
		AND t2.age_name 
	AND users.age_id NOT BETWEEN t2.id 
	AND t2.age_name)