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

在使用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这个配置:


            
            
        

你可能感兴趣的:(java,开发语言)