mybatis plus自动生成代码tinyint(1)自动转换为Boolean 的解决办法

本文详细解析了在使用MyBatisPlus时,TinyInt(1)字段自动转换为Boolean类型的问题原因,并提供了一种自定义类型转换器的解决方案,以确保代码生成器正确处理该字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明下为什么会自动转换为Boolean,是因为mybtisplus提供的默认的mysql类型转换器MySqlTypeConvert上特别写了这一段:

 

对症下药的解决办法是重写一个,在注入到配置里:

/**
 * 自定义类型转换
 */
class MySqlTypeConvertCustom extends MySqlTypeConvert implements ITypeConvert{
    @Override
    public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
        String t = fieldType.toLowerCase();
        if (t.contains("tinyint(1)")) {
            return DbColumnType.INTEGER;
        }
        return super.processTypeConvert(globalConfig, fieldType);
    }
}

 代码生成器完整代码:

package com.wjj.application;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.Arrays;

/**
 * @author hank
 */
public class TestGen {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("D://");
        gc.setFileOverride(true);
        //不需要ActiveRecord特性的请改为false
        gc.setActiveRecord(true);
        // XML 二级缓存;
        gc.setEnableCache(false);
        // XML ResultMap
        gc.setBaseResultMap(true);
        // XML columnList
        gc.setBaseColumnList(true);
        gc.setAuthor("mybatisPlus");
        gc.setDateType(DateType.ONLY_DATE);

        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");
        mpg.setGlobalConfig(gc);

        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);

        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUrl("jdbc:mysql://xxxx/xxxxxx?tinyInt1isBit=false&useUnicode=true&characterEncoding=UTF-8&generateSimpleParameterMetadata=true");
        dsc.setUsername("xxxx");
        dsc.setPassword("xxxx");
        dsc.setTypeConvert(new MySqlTypeConvertCustom());
        mpg.setDataSource(dsc);

        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix("saas_");
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setInclude("saas_medical_history", "saas_medical_history_describe", "saas_medical_history_attachment",
                "saas_medical_history_diagnose", "saas_medical_history_prescription", "saas_medical_history_prescription_subjoin",
                "saas_medical_history_prescription_chinese_list", "saas_medical_history_prescription_generic_list", "saas_medical_history_feature");
        // 指定逻辑删除字段
        strategy.setLogicDeleteFieldName("is_deleted");

        mpg.setStrategy(strategy);

        PackageConfig pc = new PackageConfig();
        pc.setParent("com.wjj.application");
        String packageModule = ".medicalhistory";
        pc.setController("controller"+packageModule);
        pc.setService("service"+packageModule);
        pc.setServiceImpl("service" + packageModule + ".impl");
        pc.setMapper("mapper" + packageModule);
        pc.setEntity("entity" + packageModule);
        mpg.setPackageInfo(pc);

        mpg.execute();
    }

}

/**
 * 自定义类型转换
 */
class MySqlTypeConvertCustom extends MySqlTypeConvert implements ITypeConvert{
    @Override
    public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
        String t = fieldType.toLowerCase();
        if (t.contains("tinyint(1)")) {
            return DbColumnType.INTEGER;
        }
        return super.processTypeConvert(globalConfig, fieldType);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值