• mybatis generator 生成javabean自定义类型转换


    因为默认mybatis generator自动生成的,带小数的都转成了bigdecimal了,而且长度不同的整数转成了不同的类型。

    但是我想要带小数的转成double,整数转成integer。

    所有自定义类型转换

    代码如下:

    /*
     *  Copyright 2005 The Apache Software Foundation
     *
     *  Licensed under the Apache License, Version 2.0 (the "License");
     *  you may not use this file except in compliance with the License.
     *  You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     *  Unless required by applicable law or agreed to in writing, software
     *  distributed under the License is distributed on an "AS IS" BASIS,
     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *  See the License for the specific language governing permissions and
     *  limitations under the License.
     */
    package org.mybatis.generator.internal.types;
    
    import java.math.BigDecimal;
    import java.sql.Types;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    import org.mybatis.generator.api.IntrospectedColumn;
    import org.mybatis.generator.api.JavaTypeResolver;
    import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
    import org.mybatis.generator.config.Context;
    import org.mybatis.generator.config.PropertyRegistry;
    import org.mybatis.generator.internal.util.StringUtility;
    
    /**
     *
     * @author Jeff Butler
     */
    public class MyJavaTypeResolver implements JavaTypeResolver {
    
        protected List<String> warnings;
    
        protected Properties properties;
    
        protected Context context;
    
        protected boolean forceBigDecimals;
    
        protected Map<Integer, JdbcTypeInformation> typeMap;
    
        public MyJavaTypeResolver() {
            super();
            properties = new Properties();
            typeMap = new HashMap<Integer, JdbcTypeInformation>();
    
            typeMap.put(Types.ARRAY, new JdbcTypeInformation("ARRAY", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.BIGINT, new JdbcTypeInformation("BIGINT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Long.class.getName())));
            typeMap.put(Types.BINARY, new JdbcTypeInformation("BINARY", //$NON-NLS-1$
                    new FullyQualifiedJavaType("byte[]"))); //$NON-NLS-1$
            typeMap.put(Types.BIT, new JdbcTypeInformation("BIT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Boolean.class.getName())));
            typeMap.put(Types.BLOB, new JdbcTypeInformation("BLOB", //$NON-NLS-1$
                    new FullyQualifiedJavaType("byte[]"))); //$NON-NLS-1$
            typeMap.put(Types.BOOLEAN, new JdbcTypeInformation("BOOLEAN", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Boolean.class.getName())));
            typeMap.put(Types.CHAR, new JdbcTypeInformation("CHAR", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.CLOB, new JdbcTypeInformation("CLOB", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.DATALINK, new JdbcTypeInformation("DATALINK", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.DATE, new JdbcTypeInformation("DATE", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Date.class.getName())));
            typeMap.put(Types.DISTINCT, new JdbcTypeInformation("DISTINCT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.DOUBLE, new JdbcTypeInformation("DOUBLE", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Double.class.getName())));
            typeMap.put(Types.FLOAT, new JdbcTypeInformation("FLOAT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Double.class.getName())));
            typeMap.put(Types.INTEGER, new JdbcTypeInformation("INTEGER", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Integer.class.getName())));
            typeMap.put(Types.JAVA_OBJECT, new JdbcTypeInformation("JAVA_OBJECT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.LONGNVARCHAR, new JdbcTypeInformation("LONGNVARCHAR", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.LONGVARBINARY, new JdbcTypeInformation(
                    "LONGVARBINARY", //$NON-NLS-1$
                    new FullyQualifiedJavaType("byte[]"))); //$NON-NLS-1$
            typeMap.put(Types.LONGVARCHAR, new JdbcTypeInformation("LONGVARCHAR", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.NCHAR, new JdbcTypeInformation("NCHAR", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.NCLOB, new JdbcTypeInformation("NCLOB", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.NVARCHAR, new JdbcTypeInformation("NVARCHAR", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
            typeMap.put(Types.NULL, new JdbcTypeInformation("NULL", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.OTHER, new JdbcTypeInformation("OTHER", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.REAL, new JdbcTypeInformation("REAL", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Float.class.getName())));
            typeMap.put(Types.REF, new JdbcTypeInformation("REF", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.SMALLINT, new JdbcTypeInformation("SMALLINT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Short.class.getName())));
            typeMap.put(Types.STRUCT, new JdbcTypeInformation("STRUCT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Object.class.getName())));
            typeMap.put(Types.TIME, new JdbcTypeInformation("TIME", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Date.class.getName())));
            typeMap.put(Types.TIMESTAMP, new JdbcTypeInformation("TIMESTAMP", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Date.class.getName())));
            typeMap.put(Types.TINYINT, new JdbcTypeInformation("TINYINT", //$NON-NLS-1$
                    new FullyQualifiedJavaType(Byte.class.getName())));
            typeMap.put(Types.VARBINARY, new JdbcTypeInformation("VARBINARY", //$NON-NLS-1$
                    new FullyQualifiedJavaType("byte[]"))); //$NON-NLS-1$
            typeMap.put(Types.VARCHAR, new JdbcTypeInformation("VARCHAR", //$NON-NLS-1$
                    new FullyQualifiedJavaType(String.class.getName())));
    
        }
    
        public void addConfigurationProperties(Properties properties) {
            this.properties.putAll(properties);
            forceBigDecimals = StringUtility
                    .isTrue(properties
                            .getProperty(PropertyRegistry.TYPE_RESOLVER_FORCE_BIG_DECIMALS));
        }
    
        public FullyQualifiedJavaType calculateJavaType(
                IntrospectedColumn introspectedColumn) {
            // TODO Auto-generated method stub
            FullyQualifiedJavaType answer;
            JdbcTypeInformation jdbcTypeInformation = typeMap
                    .get(introspectedColumn.getJdbcType());
    
            if (jdbcTypeInformation == null) {
                switch (introspectedColumn.getJdbcType()) {
                    case Types.DECIMAL:
                    case Types.NUMERIC:
                        if(introspectedColumn.getScale() > 0)
                        {//如果包含小数点则转换成float
                            answer = new FullyQualifiedJavaType(Double.class.getName());
                        }else{
                            if ( introspectedColumn.getLength() > 18
                                    || forceBigDecimals) {
                                answer = new FullyQualifiedJavaType(Integer.class
                                        .getName());
                            } else if (introspectedColumn.getLength() > 9) {
                                answer = new FullyQualifiedJavaType(Integer.class.getName());
                            } else if (introspectedColumn.getLength() > 4) {
                                answer = new FullyQualifiedJavaType(Integer.class.getName());
                            } else {
                                answer = new FullyQualifiedJavaType(Integer.class.getName());
                            }
                        }
                        break;
    
                    default:
                        answer = null;
                        break;
                }
            } else {
                answer = jdbcTypeInformation.getFullyQualifiedJavaType();
            }
    
            return answer;
        }
    
    //    public FullyQualifiedJavaType calculateJavaType(
    //            IntrospectedColumn introspectedColumn) {
    //        FullyQualifiedJavaType answer;
    //        JdbcTypeInformation jdbcTypeInformation = typeMap
    //                .get(introspectedColumn.getJdbcType());
    //
    //        if (jdbcTypeInformation == null) {
    //            switch (introspectedColumn.getJdbcType()) {
    //                case Types.DECIMAL:
    //                case Types.NUMERIC:
    //                    if (introspectedColumn.getScale() > 0
    //                            || introspectedColumn.getLength() > 18
    //                            || forceBigDecimals) {
    //                        answer = new FullyQualifiedJavaType(BigDecimal.class
    //                                .getName());
    //                    } else if (introspectedColumn.getLength() > 9) {
    //                        answer = new FullyQualifiedJavaType(Long.class.getName());
    //                    } else if (introspectedColumn.getLength() > 4) {
    //                        answer = new FullyQualifiedJavaType(Integer.class.getName());
    //                    } else {
    //                        answer = new FullyQualifiedJavaType(Short.class.getName());
    //                    }
    //                    break;
    //
    //                default:
    //                    answer = null;
    //                    break;
    //            }
    //        } else {
    //            answer = jdbcTypeInformation.getFullyQualifiedJavaType();
    //        }
    //
    //        return answer;
    //    }
    
        public String calculateJdbcTypeName(IntrospectedColumn introspectedColumn) {
            String answer;
            JdbcTypeInformation jdbcTypeInformation = typeMap
                    .get(introspectedColumn.getJdbcType());
    
            if (jdbcTypeInformation == null) {
                switch (introspectedColumn.getJdbcType()) {
                    case Types.DECIMAL:
                        answer = "DECIMAL"; //$NON-NLS-1$
                        break;
                    case Types.NUMERIC:
                        answer = "NUMERIC"; //$NON-NLS-1$
                        break;
                    default:
                        answer = null;
                        break;
                }
            } else {
                answer = jdbcTypeInformation.getJdbcTypeName();
            }
    
            return answer;
        }
    
        public void setWarnings(List<String> warnings) {
            this.warnings = warnings;
        }
    
        public void setContext(Context context) {
            this.context = context;
        }
    
        public static class JdbcTypeInformation {
            private String jdbcTypeName;
    
            private FullyQualifiedJavaType fullyQualifiedJavaType;
    
            public JdbcTypeInformation(String jdbcTypeName,
                                       FullyQualifiedJavaType fullyQualifiedJavaType) {
                this.jdbcTypeName = jdbcTypeName;
                this.fullyQualifiedJavaType = fullyQualifiedJavaType;
            }
    
            public String getJdbcTypeName() {
                return jdbcTypeName;
            }
    
            public FullyQualifiedJavaType getFullyQualifiedJavaType() {
                return fullyQualifiedJavaType;
            }
        }
    }
    

      将这个文件,编译后放到org.mybatis.generator.interal.types目录下

    MyJavaTypeResolver.class

    MyJavaTypeResolver$JdbcTypeInformation.class

    这两个class文件都要放

  • 相关阅读:
    istio kiali 亲和性调度
    istio kiali 内部介绍
    istio kiali 可视化bookinfo
    Istio 部署Bookinfo 应用
    初探istio kiali
    安装Istio
    Istio 是什么?
    AQS源码浅析
    go 单元测试testify
    go unknown revision报错
  • 原文地址:https://www.cnblogs.com/yanqin/p/6498362.html
Copyright © 2020-2023  润新知