当前使用版本(必填,否则不予处理)
3.5.3.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
@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();
}