baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.33k stars 4.3k forks source link

Generator生成对象时,如何指定对象属性类型为枚举类型? #6130

Open 501956430 opened 5 months ago

501956430 commented 5 months ago

当前使用版本 3.5.6 当前环境信息 例如: Java8 + Mysql5.7 Java8 Mysql5.7 描述bug现象

如何通过Generator 生成实体对象代码时,指定对象属性的类型为枚举类型? 这样可以完美避免手动修改生成对象属性类型了,还能避免下次执行Generator时候,需回滚部分手动添加的代码。

501956430 commented 3 months ago

这个问题什么时候,排期哈

superxiao commented 1 month ago

建议在TableField.MetaInfo中添加check,这样有如下通用定义时可以自己修改模板来生成enum。

status VARCHAR(10) CHECK (status IN ('good', 'bad'))

getCheck返回status IN ('good', 'bad')

superxiao commented 1 month ago

@501956430 目前可以通过以下方式指定enum类型

static class Handler implements ITypeConvertHandler {

    @Override
    public @NotNull IColumnType convert(GlobalConfig globalConfig, TypeRegistry typeRegistry, TableField.MetaInfo metaInfo) {
      if(Objects.equals(metaInfo.getTableName(), "this_table") && Objects.equals(metaInfo.getColumnName(), "this_field"))
      {
        return new IColumnType() {
          @Override
          public String getType() {
            return ThisEnum.getSimpleName();
          }

          @Override
          public String getPkg() {
            return ThisEnum.getName();
          }
        };
      }
      return typeRegistry.getColumnType(metaInfo);
    }

但是如果有更简易的注册方式,以及能支持通过CHECK自动生成的话就更好了。