mybatis generator可以根据数据库表结构,自动生成mybatis相关文件:mapping、mapper(dao)、model 。在生成的model中,如何生成注释呢?
答案是自定义注释生成器。
完整的 generatorConfig.xml
<?xml version=”1.0” encoding=”UTF-8” ?>
<!DOCTYPE generatorConfiguration PUBLIC “-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN” “http://mybatis.org/dtd/mybatis-generator-config\_1\_0.dtd" >
自定义注释生成器:
pom.xml 依赖
MyCommentGenerator.java
package com.hzcf.it.dashutil;
import static org.mybatis.generator.internal.util.StringUtility.isTrue;
import java.text.SimpleDateFormat;
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.Parameter;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;
/**
- 类名:MyCommentGenerator.java
- 描述: ~节点业务逻辑实现
- 创建时间: Jun 22, 2017 4:49:14 PM
- 创建人: XX
- 版本历史:
- Date Author Version Description
- Jun 22, 2017 4:49:14 PM XX 1.0 1.0 Version
/
public class MyCommentGenerator implements CommentGenerator{
private Properties properties;
private Properties systemPro;
private boolean suppressDate;
private boolean suppressAllComments;
private String currentDateStr;public MyCommentGenerator() {
super(); properties = new Properties(); systemPro = System.getProperties(); suppressDate = false; suppressAllComments = false; currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
}
public void addJavaFileComment(CompilationUnit compilationUnit) {
StringBuilder sb = new StringBuilder(); compilationUnit.addFileCommentLine("/**"); sb.append(" * "); sb.append("@author "); sb.append(systemPro.getProperty("user.name")); sb.append(" "); sb.append(currentDateStr); compilationUnit.addFileCommentLine(sb.toString().replace("
“, “ “));
compilationUnit.addFileCommentLine(" */"); return;
}
/**
- Adds a suitable comment to warn users that the element was generated, and
when it was generated.
*/
public void addComment(XmlElement xmlElement) {
return;
}public void addRootComment(XmlElement rootElement) {
// add no document level comments by default
return;
}public void addConfigurationProperties(Properties properties) {
this.properties.putAll(properties);suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
}/**
- This method adds the custom javadoc tag for. You may do nothing if you do
- not wish to include the Javadoc tag - however, if you do not include the
- Javadoc tag then the Java merge capability of the eclipse plugin will
- break.
- @param javaElement
the java element
/
protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
// javaElement.addJavaDocLine(“ “);
// StringBuilder sb = new StringBuilder();
// sb.append(“ * “);
// sb.append(MergeConstants.NEW_ELEMENT_TAG);
// if (markAsDoNotDelete) {
// sb.append(“ do_not_delete_during_merge”);
// }
// String s = getDateString();
// if (s != null) {
// sb.append(‘ ‘);
// sb.append(s);
// }
// javaElement.addJavaDocLine(sb.toString());
}/**
- This method returns a formated date string to include in the Javadoc tag
- and XML comments. You may return null if you do not want the date in
- these documentation elements.
@return a string representing the current timestamp, or null
*/
protected String getDateString() {
String result = null;
if (!suppressDate) {result = currentDateStr;
}
return result;
}public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
if (suppressAllComments) {return;
}
StringBuilder sb = new StringBuilder();
innerClass.addJavaDocLine(“/*“);
sb.append(“ “);
sb.append(introspectedTable.getFullyQualifiedTable());
sb.append(“ “);
sb.append(getDateString());
innerClass.addJavaDocLine(sb.toString().replace(“
“, “ “));
innerClass.addJavaDocLine(“ */“);
}public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
if (suppressAllComments) {return;
}
StringBuilder sb = new StringBuilder();
innerEnum.addJavaDocLine(“/*“);
sb.append(“ “);
sb.append(introspectedTable.getFullyQualifiedTable());
innerEnum.addJavaDocLine(sb.toString().replace(“
“, “ “));
innerEnum.addJavaDocLine(“ */“);
}public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if (suppressAllComments) {
return;
}
StringBuilder sb = new StringBuilder();
field.addJavaDocLine(“/*“);
sb.append(“ “);
sb.append(introspectedColumn.getRemarks());
field.addJavaDocLine(sb.toString().replace(“
“, “ “));
field.addJavaDocLine(“ */“);
}public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
if (suppressAllComments) {return;
}
StringBuilder sb = new StringBuilder();
field.addJavaDocLine(“/*“);
sb.append(“ “);
sb.append(introspectedTable.getFullyQualifiedTable());
field.addJavaDocLine(sb.toString().replace(“
“, “ “));
field.addJavaDocLine(“ */“);
}public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
// if (suppressAllComments) {
// return;
// }
// method.addJavaDocLine(“/*“);
// addJavadocTag(method, false);
// method.addJavaDocLine(“ /“);}
public void addGetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
// if (suppressAllComments) {
// return;
// }
// method.addJavaDocLine(“/*“);
// StringBuilder sb = new StringBuilder();
// sb.append(“ “);
// sb.append(introspectedColumn.getRemarks());
// method.addJavaDocLine(sb.toString().replace(“
“, “ “));
// sb.setLength(0);
// sb.append(“ @return “);
// sb.append(introspectedColumn.getActualColumnName());
// sb.append(“ “);
// sb.append(introspectedColumn.getRemarks());
// method.addJavaDocLine(sb.toString().replace(“
“, “ “));
// method.addJavaDocLine(“ /“);
}public void addSetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
// if (suppressAllComments) {
// return;
// }
// method.addJavaDocLine(“/*“);
// StringBuilder sb = new StringBuilder();
// sb.append(“ “);
// sb.append(introspectedColumn.getRemarks());
// method.addJavaDocLine(sb.toString().replace(“
“, “ “));
// Parameter parm = method.getParameters().get(0);
// sb.setLength(0);
// sb.append(“ @param “);
// sb.append(parm.getName());
// sb.append(“ “);
// sb.append(introspectedColumn.getRemarks());
// method.addJavaDocLine(sb.toString().replace(“
“, “ “));
// method.addJavaDocLine(“ /“);
}public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
if (suppressAllComments) {return;
}
StringBuilder sb = new StringBuilder();
innerClass.addJavaDocLine(“/*“);
sb.append(“ “);
sb.append(introspectedTable.getFullyQualifiedTable());
innerClass.addJavaDocLine(sb.toString().replace(“
“, “ “));
sb.setLength(0);
sb.append(“ @author “);
sb.append(systemPro.getProperty(“user.name”));
sb.append(“ “);
sb.append(currentDateStr);
innerClass.addJavaDocLine(“ /“);
}
}
最后使用mybatis generator插件执行 generator Mybatis artifacts.
最终效果