# 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模型,这种默认查全部字段
.manyToManySelect(UsersVo::getUsersAges, ageChain)
// 如果只查几个字段,可以这样写
.manyToManySelect(UsersVo::getUsersAges, () -> {
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使用方式
# 多对多查询映射
manyToManySelect 多对多,对应的就是 mybatis中的resultMap中的collection标签
// version >= 1.3.3
manyToManySelect(SFunction<P, ?> column, Class<?> manyToManyClass)
/*
该方法第一个参数代表的是需要映射到的实体类字段
第二个参数代表list中的实体类型 例如 List<Users> 这里的实体类型就是Users
第三个就是要查询的字段
*/
manyToManySelect(SFunction<P, ?> column, Class<?> manyToManyClass, Consumer<ColumnsBuilder<T>> consumer)
示例:
JoinLambdaWrapper<UsersAge> wrapper = joinLambdaQueryWrapper(UsersAge.class);
wrapper.leftJoin(Users.class, Users::getAgeId, UsersAge::getId)
.manyToManySelect(UsersAgesVo::getUsersList, Users.class, (cb) -> {
// 在1.3.2版本后 属性名和映射vo的属性名相同的情况下,可以不必写别名,就可以完成自动映射
cb.add(Users::getUserName, Users::getUserId, Users::getCreateTime);
}).end();
super.joinList(wrapper, UsersAgesVo.class);
// 执行SQL
SELECT
users_age.age_doc,users_age.age_name,users_age.id,users.user_name,users.user_id,users.create_time
FROM users_age AS users_age
LEFT JOIN users AS users ON users.age_id = users_age.id;
// 返回数据
[
{"ageDoc":"90","ageName":"90","id":1,
"usersList":[
{"createTime":1635416270000,"userId":1,"userName":"名字啊"},
{"createTime":1635416270000,"userId":2,"userName":"名字2"}
]
}
]
1.3.3版本之后可以 这样子查询这个类的所有查询字段并赋值到集合对象中
manyToManySelect(UsersAgesVo::getUsersList,Users.class)
和上面的效果是一样的
← 一对一查询映射 自定义别名和返回map类型 →