# 基础使用
# 2.0 版本使用方式
2.0版本引入了链式调用的新特性,使用更加简洁直观。
# 代码示例
// 1. 准备数据对象
UsersVo users = new UsersVo();
users.setUserName("setUserName");
users.setAgeName("setAgeName");
// 2. 创建链式查询对象
// 在原模型上添加 @JoinChainModel 注解后会自动生成 Chain 类
// 例如: Users 类会生成 UsersChain
UsersChain usersChain = UsersChain.create();
UsersAgeChain ageChain = UsersAgeChain.create();
// 3. 构建查询
return Joins.chain(usersChain)
// 使用 selectAs 指定查询字段
.selectAs(() -> {
return usersChain.userId().userName().createTime()
.to(ageChain) // 切换到另一个 chain 模型
.ageDoc().ageName().id();
})
// 关联查询条件
.leftJoin(ageChain._id(), usersChain._ageId())
.joinAnd(ageChain, (w) -> w.eq(ageChain._id(1)))
.eq(usersChain._ageId(),1)
// 条件判空
.eqIfNull(() -> {
return usersChain.userName(users.getUserName())
.userId(users.getUserId())
.ageId(users.getAgeId())
.to(ageChain)
.ageName(users.getAgeName())
.ageDoc(users.getAgeDoc());
})
.joinList(UsersVo.class);
注意: _Field 开头的方法代表单个字段,通常用于单个类型定义时使用 例如:
.eq(usersChain._ageId(),1)
# 2.0 之前版本使用方式
# 基本步骤
- 创建 JoinLambdaWrapper 对象
- 使用 join 方法定义关联关系
- 设置查询条件
- 执行查询
# 代码示例
// 1. 创建 wrapper (在 service 中可直接使用 joinLambdaWrapper() 方法)
JoinLambdaWrapper<Users> wrapper = new JoinLambdaWrapper<>(Users.class);
// 2. 定义关联关系
// 支持 leftJoin/rightJoin/innerJoin 三种关联方式
wrapper.leftJoin(UsersAge.class, UsersAge::getId, Users::getAgeId)
.eq(UserAge::getAgeName, "95")
.select(UserAge::getAgeName)
.end();
// 3. 执行查询
// 方式一: 通过 service
usersService.joinList(wrapper, UsersVo.class);
// 方式二: 直接使用 wrapper
wrapper.joinList(UsersVo.class);
# 生成的 SQL
SELECT
users.user_id,
users.user_name,
users_age.age_name
FROM users users
LEFT JOIN users_age users_age ON users_age.id = users.age_id
WHERE users_age.age_name = '95'
相比 MyBatis-Plus 原生用法,只是增加了 join 相关的方法,使用方式基本一致。