mybatis-generator源码修改—修改实体类型

本文介绍了如何修改mybatis-generator的源码,以将默认生成的Short和Long实体类型改为整型Integer,同时修复了Float类型被错误地映射为Double的问题。主要涉及BaseRecordGenerator类中的getCompilationUnits()方法,通过修改calculateJavaType()和相关配置实现定制化。

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

在使用mybatis-generator生成的代码中,对于数值类型的字段,一般会根据字段的大小生成Short和Long,但是在实际使用中,我习惯将整数定义为整型,另外发现Float类型会生成Double的实体,所以一直希望把这一点改一下。

我们先找到生成实体的地方,在org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator,我们找到生成实体成员的地方,在方法getCompilationUnits()里面找到这句代码:

Field field = getJavaBeansField(introspectedColumn, context, introspectedTable);

通过getJavaBeansField这个方法可以找到,获取实体成员类型的关键代码为:

FullyQualifiedJavaType fqjt = introspectedColumn.getFullyQualifiedJavaType();

我们通过setFullyQualifiedJavaType这个方法,可以找到生成这个类的地方:

org.mybatis.generator.internal.db.DatabaseIntrospector的calculateExtraColumnInformation()这个方法。

我们找到

FullyQualifiedJavaType fullyQualifiedJavaType = javaTypeResolver.calculateJavaType(introspectedColumn);

这句代码,进到calculateJavaType()这个方法里面,发现了关键的代码:

JdbcTypeInformation jdbcTypeInformation = typeMap.get(introspectedColumn.getJdbcType());

这个typeMap里面存放了jdbc类型对应的java类型,修改float类型为:

 我们继续看calculateJavaType()这个方法,

answer = overrideDefaultType(introspectedColumn, answer);

进入到overrideDefaultType这个方法里面,修改number类型,指定为整型

 

进入calculateBigDecimalReplacement这个方法,修改如下:

protected FullyQualifiedJavaType calculateBigDecimalReplacement(IntrospectedColumn column, FullyQualifiedJavaType defaultType) {
        FullyQualifiedJavaType answer;

        if(isAllNumberToInteger){
            //所有的数字都转换成整型, add by chenyk on 20220417
            answer = new FullyQualifiedJavaType(Integer.class.getName());
        }
        else {
            if (column.getScale() > 0 || column.getLength() > 18 || forceBigDecimals) {
                answer = defaultType;
            } else if (column.getLength() > 9) {
                answer = new FullyQualifiedJavaType(Long.class.getName());
            } else if (column.getLength() > 4) {
                answer = new FullyQualifiedJavaType(Integer.class.getName());
            } else {
                answer = new FullyQualifiedJavaType(Short.class.getName());
            }
        }

        return answer;
    }

 我在generatorConfig.xml加了isAllNumberToInteger这个配置:

<javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
            <property name="isAllNumberToInteger" value="true"></property>
        </javaTypeResolver>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值