当前使用版本(必填,否则不予处理)
3.5.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
数据库是 mysql,在链接上加了参数 tinyInt1isBit=true,但生成的 entity 中 tinyint(1) 类型的字段不是布尔类型,而是 Byte
重现步骤(如果有就写完整)
FastAutoGenerator.create("jdbc:mysql://localhost:3306/demanduck?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=true", username, password)
.globalConfig(builder -> {
builder.author("mysterin")
.commentDate("yyyy-MM-dd")
.fileOverride()
.outputDir("src/main/java")
.disableOpenDir();
})
.packageConfig(builder -> {
builder.parent("com.nib.demanduck")
.controller("controller")
.service("service")
.entity("entity")
.mapper("mapper");
})
.strategyConfig(builder -> {
builder
// 表名
.addInclude(
"nib_user"
)
// 前缀
.addTablePrefix("nib_")
// 实体
.entityBuilder()
.idType(IdType.ASSIGN_ID)
.addTableFills(new Column("deleted", FieldFill.INSERT))
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE))
.addTableFills(new Column("create_user", FieldFill.INSERT))
.addTableFills(new Column("update_user", FieldFill.INSERT_UPDATE))
.enableTableFieldAnnotation()
.enableLombok()
.enableFileOverride()
.logicDeleteColumnName("deleted")
// mapper
.mapperBuilder()
.formatMapperFileName("%sMapper")
.enableMapperAnnotation()
// .enableFileOverride()
// service
.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
// .enableFileOverride()
// controller
.controllerBuilder()
.formatFileName("%sController")
// .enableFileOverride()
.enableRestStyle();
}).templateConfig(builder -> {
builder.xml(null);
}).execute();
也想过使用类型转换器处理,如下:
.dataSourceConfig(builder -> {
builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
if (metaInfo.getJdbcType().equals(JdbcType.TINYINT)) {
return DbColumnType.BOOLEAN;
}
return typeRegistry.getColumnType(metaInfo);
});
})
虽然可以转 Boolean,不过我想只对 tinyint(1) 转成 Boolean,对于其他 tinyint 保持原样
报错信息
Comment From: nieqiurong
提供一下数据库使用版本与驱动版本.
Comment From: mysterin
提供一下数据库使用版本与驱动版本.
数据库版本:5.7.11-log 驱动版本: mysql-connector-java:5.1.45
Comment From: nieqiurong
看驱动源码6.x的版本获取元数据才处理了tinyInt1isBit,升级到8.0.11的mysql驱动就行了.
Comment From: mysterin
看驱动源码6.x的版本获取元数据才处理了tinyInt1isBit,升级到8.0.11的mysql驱动就行了.
驱动版本给我了思路,我进行了下面几个测试: 1. mysql版本=5.7.11-log,驱动版本mysql-connector-java=5.1.45,tinyInt1isBit=true,结果:tinyint(1) 不会转存 Boolean 2. mysql版本=5.7.11-log,驱动版本mysql-connector-java=8.0.11,mysql版本=5.7.11-log,此时报错,驱动版本过高导致 3. mysql版本=8.0.18,驱动版本mysql-connector-java 不管是 5.1.45 还是 8.0.11,也不管有没有设置 tinyint1Bit,tinyint(1) 都会转存 Boolean
Comment From: nieqiurong
看驱动源码6.x的版本获取元数据才处理了tinyInt1isBit,升级到8.0.11的mysql驱动就行了.
驱动版本给我了思路,我进行了下面几个测试:
- mysql版本=5.7.11-log,驱动版本mysql-connector-java=5.1.45,tinyInt1isBit=true,结果:tinyint(1) 不会转存 Boolean
- mysql版本=5.7.11-log,驱动版本mysql-connector-java=8.0.11,mysql版本=5.7.11-log,此时报错,驱动版本过高导致
- mysql版本=8.0.18,驱动版本mysql-connector-java 不管是 5.1.45 还是 8.0.11,也不管有没有设置 tinyint1Bit,tinyint(1) 都会转存 Boolean
驱动是支持5.7的,有问题对应解决就行.