当前使用版本(必填,否则不予处理)

3.5.3.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

MyBatis-Plus 代码生成器     .enableRemoveIsPrefix()  // 开启 Boolean 类型字段移除 is 前缀      无效!

@ApiModelProperty("逻辑删除 1(true)已删除, 0(false)未删除") @TableLogic private Byte isDeleted;

重现步骤(如果有就写完整)

生成方法

@Test
    public void testGenerateCode(){
        String moduleName = "edu";
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/guli_" + moduleName, "root", "123456")
                .globalConfig(builder -> {
                    builder.author("jack") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .dateType(DateType.ONLY_DATE)
                            .outputDir("main\\java"); // 指定输出目录
                })
                // 数据库配置
                .dataSourceConfig(builder ->
                        builder.dbQuery(new MySqlQuery())
                                .schema("guli_" + moduleName)
                                .typeConvert(new MySqlTypeConvert())
                                .keyWordsHandler(new MySqlKeyWordsHandler())
                )
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("com.hb.service") // 设置父包名
                            .moduleName(moduleName)
                            .entity("entity")
                            .service("service")
                            .mapper("mapper")
                            .xml("mapper.xml")
                            .controller("controller")
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    "D:\\com\\hb\\service_" + moduleName)); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder
                            .addTablePrefix(moduleName + "_"); // 设置过滤表前缀
                    builder.entityBuilder()
                            .enableChainModel()
                            .enableRemoveIsPrefix()  // 开启 Boolean 类型字段移除 is 前缀
                            .naming(NamingStrategy.underline_to_camel)
                            .columnNaming(NamingStrategy.underline_to_camel)
                            .idType(IdType.ASSIGN_ID)   // 主键策略
                            .logicDeleteColumnName("is_deleted")
                            .addTableFills(new Column("gmt_create", FieldFill.INSERT))
                            .addTableFills(new Property("gmtModified", FieldFill.INSERT_UPDATE))
                            .superClass(BaseEntity.class)
                            .addSuperEntityColumns("id","gmtCreate","gmtModified")
                            .enableLombok();
                    builder.serviceBuilder()
                            .formatServiceFileName("%sService");
                    builder.controllerBuilder()
                            .enableRestStyle()
                            .enableHyphenStyle();
                })
                .templateEngine(new VelocityTemplateEngine())
                .execute();
    }

报错信息

无报错,结果不符合预期

Comment From: nieqiurong

is_deleted的长度需要换成bit(1)

Comment From: Bin1993

你的表的is_deleted 是tinyint类型吧,代码生成的时候会转成java Byte类型,enableRemoveIsPrefix是开启 Boolean 类型字段移除 is 前缀

Comment From: Bin1993

你可以用tinyint(1)类型,这边mybatis-plus-generator底层是通过ReultSet获取mysql字段信息的,发现tinyint(1)类型的字段默认会当成了bit(1)类型处理。如果你不想当成bit处理,可以在连接参数中设置tinyInt1isBit=false

Comment From: Bin1993

你把字段类型设置成tinyint(1)就可以了

Comment From: nieqiurong

is_deleted的长度需要换成bit(1)

看成使用MySqlTypeConvert()去了,元数据查询用tinyint(1)是对的,只有长度为1的才行,如果是sql查询的就可能是bit的问题.

Comment From: qmdx

使用方法如下,默认 DefaultQuery 类型转换处理器需要自行定义,否则建议指定 dbQuery 具体数据

public void testEnableRemoveIsPrefix() {
    AutoGenerator generator = new AutoGenerator(new DataSourceConfig.Builder(H2URL, "sa", "")
        .typeConvertHandler(new ITypeConvertHandler() {
            @Override
            public @NotNull IColumnType convert(GlobalConfig globalConfig, TypeRegistry typeRegistry, TableField.MetaInfo metaInfo) {
                IColumnType dbColumnType = typeRegistry.getColumnType(metaInfo);
                if (dbColumnType == DbColumnType.BYTE) {
                    // 这里按照自己的要求转换为指定类型
                    return DbColumnType.BOOLEAN;
                }
                return dbColumnType;
            }
        }).build());
    generator.strategy(strategyConfig().entityBuilder().enableRemoveIsPrefix().build());
    generator.execute();
}