# 动态表名

# MyBatis-Plus 动态表名插件 (opens new window)

# wrapper动态表名支持(1.4.4+)

注意事项:

wrapper 动态表名版本需要1.4.4+
使用动态表名有sql有注入风险, 使用时需自行把控

注意事项:

动态表名不是表别名! 自定义表别名请参考 leftJoin
动态表名和别名没有任何关系,动态表名不会修改表别名!

举个例子:user表改成user_2023表

.setTableName(name -> name + "_2023")

修改前:
select ... from user t
修改后:
select ... form user_2023 t

# 支持主表和副表动态表名

主表需要添加@DynamicTableName注解启用动态表名 副表不需要添加也能实现动态表名

@DynamicTableName
public class UserDO{
}

代码

MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
        .select(UserDO::getId)
        .leftJoin(AddressDO.class, on -> on
                .eq(AddressDO::getUserId, UserDO::getId)
                // 副表动态表名 name 为原副表名 返回新表名
                .setTableName(name -> name + "aaaaaaaaaa"))
        .leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId)
        .le(UserDO::getId, 10000)
        .orderByDesc(UserDO::getId)
        // 主表动态表名 name 为原主表表名 返回新表名
        .setTableName(name -> name + "bbbbbbb");