【Mybatis-plus-join】 selectAs() 查询添加别名

Metadata

title: 【Mybatis-plus-join】 selectAs() 查询添加别名
date: 2023-01-22 19:18
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Mybatis-plus-join
categories:
  - Mybatis-plus-join
keywords:
  - Mybatis-plus-join
description: 【Mybatis-plus-join】 selectAs() 查询添加别名

【Mybatis-plus-join】 selectAs() 查询添加别名

/* 
  selectAs(List<As<T>> columns) 
  selectAs(SFunction<T, ?> column, String alias)
  查询并添加别名
*/
// 拿起来我们上面用的哪个实例。我现在需要给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);
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'
)

这里需要注意啊,如果selectAs那个地方因为是函数接口,所以值是不可以改变的,如果是可变的那么可以采用

    selectAs(Arrays.asList(
            new As(UserAge::getAgeName,"user_age_name"),
            new As(UserAge::getAgeDoc)
    ))