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());
}
}