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

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();

MyBatis-Plus tinyInt1isBit=true 不生效

也想过使用类型转换器处理,如下:

.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驱动就行了.

驱动版本给我了思路,我进行了下面几个测试:

  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

驱动是支持5.7的,有问题对应解决就行. MyBatis-Plus tinyInt1isBit=true 不生效