mybatis-generator-coreコード修正

20523 ワード

Mybatisを使用してリバースエンジニアリングで生成されたjavaファイルとxmlファイルのネーミングとスタイルが見えてしびれるので、修正するつもりです.
参考文献:http://generator.sturgeon.mopaas.com/reference/extending.html http://blog.csdn.net/wu6660563/article/details/52093364 http://www.blogjava.net/bolo/archive/2015/04/10/424271.html
まずgithubに行ってソースコードをダウンロードします
generator-master.zipファイルをダウンロードし、次のように解凍します:mybatis-generator-core 代码修改_第1张图片
二mybatis-generator-coreプロジェクトをIdeaにインポート
それからmybatis-generator-coreプロジェクトをideaで開きます.MySQLを使ったのでpom.xmlファイルにmysqlドライバを導入する必要があります.私が使ったアリソースmybatisは最新3.4.2で、プロジェクトは最新3.5バージョンです.
    <dependency>
      <groupId>mysqlgroupId>
      <artifactId>mysql-connector-javaartifactId>
      <version>5.1.9version>
    dependency>
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatisartifactId>
      <version>3.4.2version>
    dependency>

三修正開始
これは核心的なもので、私たちが本当に変えなければならないものです.
1生成したxmlファイルのインデントを変更する
クラスを変更する必要がありますorg.mybatis.generator.api.dom.OutputUtilities
public static void xmlIndent(StringBuilder sb, int indentLevel) {
        for (int i = 0; i < indentLevel; i++) {
            sb.append("  ").append("  "); //   2   
        }
    }

2プロパティとメソッド間の改行を変更する
クラスorg.mybatis.generator.api.dom.java.InnerClassを変更する必要があります
public String getFormattedContent(int indentLevel, CompilationUnit compilationUnit) {
        ...
        sb.append(" {"); //$NON-NLS-1$
        indentLevel++;
        OutputUtilities.newLine(sb);   //                  
        Iterator fldIter = fields.iterator();
        while (fldIter.hasNext()) {
            OutputUtilities.newLine(sb);
            Field field = fldIter.next();
            sb.append(field.getFormattedContent(indentLevel, compilationUnit));
            if (fldIter.hasNext()) {
               OutputUtilities.newLine(sb);   //           
            }
        }
        ......
    }

3 xmlファイルがマージされるかどうかを制御する
クラスorg.mybatis.generator.api.dom.java.InnerClassを変更する必要があります
public List getGeneratedXmlFiles() {
        List answer = new ArrayList();

        if (xmlMapperGenerator != null) {
            Document document = xmlMapperGenerator.getDocument();
            GeneratedXmlFile gxf = new GeneratedXmlFile(document,
                getMyBatis3XmlMapperFileName(), getMyBatis3XmlMapperPackage(),
                context.getSqlMapGeneratorConfiguration().getTargetProject(),
                false, context.getXmlFormatter());  //           xml  
            if (context.getPlugins().sqlMapGenerated(gxf, this)) {
                answer.add(gxf);
            }
        }

しかし、falseに変更した後、shellCallback.isOverwriteEnabled()を有効にしてxmlファイルオーバーライド生成を実現するには、実行するコマンドラインにoverwriteパラメータを追加する必要があります.
4わけのわからないExample類を取り除く
関連するクラスorg.mybatis.generator.codegen.mybatis 3.IntrospectedTableMyBatis 3 Impl
最初はtableの構成が簡単でした,, Example , , ExampleGenerator null,(⊙﹏⊙)b

public List getGeneratedJavaFiles() {
        List answer = new ArrayList();

        /**
         *           
         */
        for (AbstractJavaGenerator javaGenerator : javaModelGenerators) {
            List compilationUnits = javaGenerator
                    .getCompilationUnits();
            if (compilationUnits == null) {
                // ExampleGenerator     null
            }else{
                for (CompilationUnit compilationUnit : compilationUnits) {
                    GeneratedJavaFile gjf = new GeneratedJavaFile(compilationUnit,
                            context.getJavaModelGeneratorConfiguration()
                                    .getTargetProject(),
                            context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
                            context.getJavaFormatter());
                    answer.add(gjf);
                }
            }
        }
        xml     
<table tableName="nami_user_and_web_site" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false">
 table>

OK ,xml id=”xxxByExample” ,

5

org.mybatis.generator.internal.DefaultCommentGenerator


addComment xml
addJavaFileComment java
addClassComment
, org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator 64

commentGenerator.addClassComment(topLevelClass,introspectedTable);

, , , , 。
FullyQualifiedTable remarks , DatabaseIntrospector calculateIntrospectedTables

                Statement stmt = null;
            try {
                stmt = databaseMetaData.getConnection().createStatement();
                ResultSet rs = stmt.executeQuery("SHOW TABLE STATUS LIKE '" + atn.getTableName() + "'");
                while (rs.next()) {
                    table.setRemarks(rs.getString("COMMENT"));
                }
                closeResultSet(rs);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

6

: _

String domainName = fullyQualifiedTable.getDomainObjectName()

xxx_user , org.mybatis.generator.api.getDomainObjectName

    public String getDomainObjectName() {
        if (stringHasValue(domainObjectName)) {
            return domainObjectName;
        } else if (stringHasValue(runtimeTableName)) {
            return getCamelCaseStringByIronC(runtimeTableName, true);
        } else {
            return getCamelCaseStringByIronC(introspectedTableName, true);
        }
    }
  getCamelCaseStringByIronC     org.mybatis.generator.internal.util.JavaBeansUtil     
    public static String getCamelCaseStringByIronC(String inputString,
                                                   boolean firstCharacterUppercase) {
        String substring = inputString.substring(inputString.indexOf("_")+1, inputString.length()); //           
        return getCamelCaseString(substring, firstCharacterUppercase);
    }

<table tableName="nami_tag" domainObjectName="tag" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false"
        enableSelectByExample="false" selectByExampleQueryId="false">
            <columnOverride column="tag_status" jdbcType="TINYINT" javaType="java.lang.Integer"/>
table>

7 xml dao



org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator

protected XmlElement getSqlMapElement() {
        FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
        progressCallback.startTask(getString(
                "Progress.12", table.toString())); //$NON-NLS-1$
        XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$
        String namespace = introspectedTable.getMyBatis3SqlMapNamespace();
        answer.addAttribute(new Attribute("namespace", //$NON-NLS-1$
                namespace));

        context.getCommentGenerator().addRootComment(answer);

        addResultMapWithoutBLOBsElement(answer);
        addResultMapWithBLOBsElement(answer);
        addExampleWhereClauseElement(answer);
        addMyBatis3UpdateByExampleWhereClauseElement(answer);
        addBaseColumnListElement(answer);
        addBlobColumnListElement(answer);
//        addSelectByExampleWithBLOBsElement(answer);
//        addSelectByExampleWithoutBLOBsElement(answer);
        addSelectByPrimaryKeyElement(answer);
        addDeleteByPrimaryKeyElement(answer);
//        addDeleteByExampleElement(answer);
        addInsertElement(answer);
        addInsertSelectiveElement(answer);
//        addCountByExampleElement(answer);
//        addUpdateByExampleSelectiveElement(answer);
//        addUpdateByExampleWithBLOBsElement(answer);
//        addUpdateByExampleWithoutBLOBsElement(answer);
        addUpdateByPrimaryKeySelectiveElement(answer);
//        addUpdateByPrimaryKeyWithBLOBsElement(answer);
//        addUpdateByPrimaryKeyWithoutBLOBsElement(answer);

        return answer;
    }

public List<CompilationUnit> getCompilationUnits() {
        progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$
                introspectedTable.getFullyQualifiedTable().toString()));
        CommentGenerator commentGenerator = context.getCommentGenerator();

        FullyQualifiedJavaType type = new FullyQualifiedJavaType(
                introspectedTable.getMyBatis3JavaMapperType());
        Interface interfaze = new Interface(type);
        interfaze.setVisibility(JavaVisibility.PUBLIC);
        commentGenerator.addJavaFileComment(interfaze);

        String rootInterface = introspectedTable
            .getTableConfigurationProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
        if (!stringHasValue(rootInterface)) {
            rootInterface = context.getJavaClientGeneratorConfiguration()
                .getProperty(PropertyRegistry.ANY_ROOT_INTERFACE);
        }

        if (stringHasValue(rootInterface)) {
            FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType(
                    rootInterface);
            interfaze.addSuperInterface(fqjt);
            interfaze.addImportedType(fqjt);
        }

//        addCountByExampleMethod(interfaze);
//        addDeleteByExampleMethod(interfaze);
        addDeleteByPrimaryKeyMethod(interfaze);
        addInsertMethod(interfaze);
        addInsertSelectiveMethod(interfaze);
//        addSelectByExampleWithBLOBsMethod(interfaze);
//        addSelectByExampleWithoutBLOBsMethod(interfaze);
        addSelectByPrimaryKeyMethod(interfaze);
//        addUpdateByExampleSelectiveMethod(interfaze);
//        addUpdateByExampleWithBLOBsMethod(interfaze);
//        addUpdateByExampleWithoutBLOBsMethod(interfaze);
        addUpdateByPrimaryKeySelectiveMethod(interfaze);
//        addUpdateByPrimaryKeyWithBLOBsMethod(interfaze);
//        addUpdateByPrimaryKeyWithoutBLOBsMethod(interfaze);

        List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
        if (context.getPlugins().clientGenerated(interfaze, null,
                introspectedTable)) {
            answer.add(interfaze);
        }

        List<CompilationUnit> extraCompilationUnits = getExtraCompilationUnits();
        if (extraCompilationUnits != null) {
            answer.addAll(extraCompilationUnits);
        }

        return answer;
    }

, , , , , copy 。