1. 程式人生 > >myBatis-generator 生成中文註釋的問題

myBatis-generator 生成中文註釋的問題

mybatis.generator的官方外掛只能生成一些無用的英文註釋,要生成中文註釋需要修改原始碼。

現在以mybatis.generator-1.3.5為例,說明修改原始碼的內容。

修改的內容一共兩個類:DefaultCommentGenerator.java和 MyBatisGenerator.java ;這兩個類均來自org.mybatis.generator.core_1.3.5.201609070108.jar包;

首先需要下載它的原始碼包:org.mybatis.generator.core.source_1.3.5.201609070108.jar

1、修改DefaultCommentGenerator.java(解決中文註釋的問題);

package org.mybatis.generator.internal;


import java.util.Date;
import java.util.Properties;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.InnerEnum;
import org.mybatis.generator.api.dom.java.JavaElement;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.internal.util.StringUtility;


public class DefaultCommentGenerator implements CommentGenerator {
private Properties properties;
private boolean suppressDate;
private boolean suppressAllComments;


public DefaultCommentGenerator() {
this.properties = new Properties();
this.suppressDate = false;
this.suppressAllComments = false;
}


public void addJavaFileComment(CompilationUnit compilationUnit) {
}


public void addComment(XmlElement xmlElement) {
if (this.suppressAllComments) {
}
}


public void addRootComment(XmlElement rootElement) {
}


public void addConfigurationProperties(Properties properties) {
this.properties.putAll(properties);


this.suppressDate = StringUtility.isTrue(properties.getProperty("suppressDate"));


this.suppressAllComments = StringUtility.isTrue(properties.getProperty("suppressAllComments"));
}


protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
javaElement.addJavaDocLine(" *");
StringBuilder sb = new StringBuilder();
sb.append(" * ");
sb.append("@mbggenerated");
if (markAsDoNotDelete) {
sb.append(" do_not_delete_during_merge");
}
String s = getDateString();
if (s != null) {
sb.append(' ');
sb.append(s);
}
javaElement.addJavaDocLine(sb.toString());
}


protected String getDateString() {
if (this.suppressDate) {
return null;
}
return new Date().toString();
}


public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
if (this.suppressAllComments) {
}
}


public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
if (this.suppressAllComments) {
}
}


public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (this.suppressAllComments) {
return;
}


StringBuilder sb = new StringBuilder();


sb.append(" /** ");
sb.append(introspectedColumn.getRemarks());
sb.append(" ");
sb.append(introspectedTable.getFullyQualifiedTable());
sb.append('.');
sb.append(introspectedColumn.getActualColumnName());
sb.append(" */");
field.addJavaDocLine(sb.toString());
}


public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
if (this.suppressAllComments) {
}
}


public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
if (this.suppressAllComments) {
}
}


public void addGetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (this.suppressAllComments) {
return;
}


StringBuilder sb = new StringBuilder();


sb.append(" /** 取值:");
sb.append(introspectedColumn.getRemarks());
sb.append(" */");
method.addJavaDocLine(sb.toString());
}


public void addSetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (this.suppressAllComments) {
return;
}


StringBuilder sb = new StringBuilder();


sb.append(" /** 賦值:");
sb.append(introspectedColumn.getRemarks());
sb.append(" */");
method.addJavaDocLine(sb.toString());
}


public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
if (this.suppressAllComments) {
}
}


@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
// TODO Auto-generated method stub


}
}

2、修改MyBatisGenerator.java (解決多次執行同一個xml,生成重複程式碼的問題);

主要修改兩個方法:

writeGeneratedJavaFile(GeneratedJavaFile gjf, ProgressCallback callback)

和writeGeneratedXmlFile(GeneratedXmlFile gxf, ProgressCallback callback)

修改後的程式碼如下:

    private void writeGeneratedJavaFile(GeneratedJavaFile gjf, ProgressCallback callback)
            throws InterruptedException, IOException {
        File targetFile;
        String source;
        try {
            File directory = shellCallback.getDirectory(gjf
                    .getTargetProject(), gjf.getTargetPackage());
            targetFile = new File(directory, gjf.getFileName());
            if (targetFile.exists()) {
            source = gjf.getFormattedContent();
            } else {
                source = gjf.getFormattedContent();
            }


            callback.checkCancel();
            callback.startTask(getString(
                    "Progress.15", targetFile.getName())); //$NON-NLS-1$
            writeFile(targetFile, source, gjf.getFileEncoding());
        } catch (ShellException e) {
            warnings.add(e.getMessage());
        }
    }


    private void writeGeneratedXmlFile(GeneratedXmlFile gxf, ProgressCallback callback)
            throws InterruptedException, IOException {
        File targetFile;
        String source;
        try {
            File directory = shellCallback.getDirectory(gxf
                    .getTargetProject(), gxf.getTargetPackage());
            targetFile = new File(directory, gxf.getFileName());
            if (targetFile.exists()) {
            source = gxf.getFormattedContent();
            } else {
                source = gxf.getFormattedContent();
            }


            callback.checkCancel();
            callback.startTask(getString(
                    "Progress.15", targetFile.getName())); //$NON-NLS-1$
            writeFile(targetFile, source, "UTF-8"); //$NON-NLS-1$
        } catch (ShellException e) {
            warnings.add(e.getMessage());
        }
    }