# 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();
})
.leftJoin(ageChain._id(), usersChain._ageId())
// joinand 第一个参数为需要进行 joinAnd的 子表Chain 模型
.joinAnd(ageChain, (w) -> w.eq(ageChain._id(1)))
// 第一个值为 vo的字段,第二个值为 chain模型,这种默认查全部字段
.oneToOneSelect(UsersVo::getUsersAge, ageChain)
// 如果只查几个字段,可以这样写
.oneToOneSelect(UsersVo::getUsersAge, () -> {
return ageChain.ageDoc().ageName().id();
})
.joinList(UsersVo.class);
// 生成SQL
SELECT
users.user_id,
users.user_name,
users.create_time,
users_age.age_doc AS users_age_age_doc,
users_age.age_name AS users_age_age_name,
users_age.create_time AS users_age_create_time,
users_age.content_json_age AS users_age_content_json_age,
users_age.id AS 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使用方式
# 一对一查询映射
很多时候连表返回的字段很多都相同,所以在每个vo里面都会出现,如果把这些重复性字段封装成一个类,会更好维护,所以说针对这个情况 版本 >= 1.0.6 即可使用oneToOneSelect 方法
oneToOneSelect(SFunction<P, ?> column, Class<?> modelClass) (version >= 1.3.3)
oneToOneSelect(SFunction<P, ?> column, Consumer<ColumnsBuilder<T>> consumer)
JoinLambdaWrapper<Users> wrapper = joinLambdaQueryWrapper(Users.class);
wrapper.leftJoin(UsersAge.class, UsersAge::getId, Users::getAgeId)
// oneToOneSelect 第一个参数需要映射的实体类字段,第二个参数则是查询函数
.oneToOneSelect(UsersVo::getUsersAge, (cb) -> {
cb.add(UsersAge::getAgeDoc, UsersAge::getAgeName)
/*
当你出现两个实体类映射字段相同,例如 user实体中有个字段id,userAge表中也有个字段id,你
想要同时获取这两个字段,这时候则可以使用
|column : 查询字段
|alias : 别名
|fieldName : 字段名称
add(SFunction<T, ?> column, String alias, SFunction<F, ?> fieldName)
*/
.add(UsersAge::getId, "ageId", UsersAge::getId)
// 在1.3.2版本后 属性名和映射vo的属性名相同的情况下,可以不必写别名,就可以完成自动映射
.add(UsersAge::getId);
})
.end();
super.joinList(wrapper, UsersVo.class);
// 执行SQL
SELECT users.user_name, users.create_time, users.age_id, users.user_id, users_age.age_doc
, users_age.age_name, users_age.id AS ageId
FROM users users
LEFT JOIN users_age users_age ON users_age.id = users.age_id
// 返回结果
[
{
"ageId":1,
"createTime":1635416270000,
"userId":1,
"userName":"名字啊",
"usersAge":{
"ageDoc":"90",
"ageName":"90",
"id":1
}
}....
]
在1.3.3版本之后使用方式就简单了许多
JoinLambdaWrapper<Users> wrapper = joinLambdaQueryWrapper(Users.class);
wrapper.leftJoin(UsersAge.class, UsersAge::getId, Users::getAgeId)
// 1.3.3版本之后可以 这样子查询这个类的所有查询字段并赋值到对象中
.oneToOneSelect(UsersVo::getUsersAge,UsersAge.class).end();