# 基础使用

# 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 之前版本使用方式

# 基本步骤

  1. 创建 JoinLambdaWrapper 对象
  2. 使用 join 方法定义关联关系
  3. 设置查询条件
  4. 执行查询

# 代码示例

// 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 相关的方法,使用方式基本一致。