# 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)