# 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("userIdsssss").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 AS userIdsssss,
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使用方式
# selectAs() 查询添加别名,推荐使用该方式查询字段
方法参数
selectAs(Consumer<ColumnsBuilder<T>> consumer)
selectAs(SFunction<T, ?> column, String alias)
selectAs(SFunction<T, ?> column, SFunction<J, ?> alias) (version >= 1.3.2)
示例:
// 我现在需要给ageName给个别名 user_age_name
JoinLambdaWrapper<Users> wrapper = new JoinLambdaWrapper<>(Users.class);
wrapper.leftJoin(UsersAge.class,UsersAge::getId,Users::getAgeId)
.eq(UserAge::getAgeName,"95")
.selectAs(UserAge::getAgeName,"user_age_name")
// 在1.3.2版本后可以采用函数的方式写别名
.selectAs(UserAge::getAgeName,UsersVo::getUserAgeName)
.end();
// 执行查询
usersService.joinList(wrapper,UsersVo.class);
// 执行SQL
select
users.user_id,
users.user_name,
users_age.age_name as user_age_name
from users users
left join users_age users_age on users_age.id = users.age_id
where (
users_age.age_name = '95'
)
// 现在来个高级需求,我需要查询出users_age表中的两个字段并且需要加一个固定值
JoinLambdaWrapper<Users> wrapper = new JoinLambdaWrapper<>(Users.class);
wrapper.join(UsersAge.class)
.leftJoin(UsersAge::getId,Users::getAgeId)
.eq(UserAge::getAgeName,"95")
.selectAs((cb) -> {
cb.add(UserAge::getAgeName,"user_age_name")
.add(UserAge::getAgeDoc)
.addFunAlias(UserAge::getAgeName,UsersVo::getUserAgeName) // 该方法在1.3.2版本后支持
.add("mp永远滴神","mpnb")
.add("sum(users_age.id)","ageIdSum",false); // 这个为false就是代表不是字符串,会原样查询 在1.3.1版本后支持
}).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,
sum(users_age.id) as ageIdSum
from users users
left join users_age users_age on users_age.id = users.age_id
where (
users_age.age_name = '95'
)
现在来个高级需求,我需要查询出users_age表中的两个字段并且需要加一个固定值,并且查询id的sum值,就可以使用
selectAs(Consumer<ColumnsBuilder<T>> consumer) // 函数方式
JoinLambdaWrapper<Users> wrapper = new JoinLambdaWrapper<>(Users.class);
wrapper.join(UsersAge.class)
.leftJoin(UsersAge::getId,Users::getAgeId)
.eq(UserAge::getAgeName,"95")
.selectAs((cb) -> {
cb.add(UserAge::getAgeName,"user_age_name")
.add(UserAge::getAgeDoc)
.addFunAlias(UserAge::getAgeName,UsersVo::getUserAgeName) // 该方法在1.3.2版本后支持
.add("mp永远滴神","mpnb")
.add("sum(users_age.id)","ageIdSum",false); // 这个为false就是代表不是字符串,会原样查询 在1.3.1版本后支持
}).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,
sum(users_age.id) as ageIdSum
from users users
left join users_age users_age on users_age.id = users.age_id
where (
users_age.age_name = '95'
)
WARNING
这里需要注意啊,如果selectAs那个地方因为是函数接口,所以值是不可以改变的,如果是可变的那么可以采用
selectAs(Arrays.asList(
new As(UserAge::getAgeName,"user_age_name"),
new As(UserAge::getAgeDoc)
))