mybatis生成实体自带注释

mybatis通常自动生成的实体是没有中文注释的,想要生成的实体有中文注释,步骤如下

1、数据库的自字段一定要有注释,如下图

mybatis生成实体自带注释
实体中的所有注释是从数据库中的注释而来

2、并创建实体类DefaultCommentGenerator 的class文件

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.*;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Set;

import static org.mybatis.generator.internal.util.StringUtility.isTrue;

/**

  • mybatis generator 注释

  • @author Klaus Allen

  • @date 2018/6/15
    */
    public class DefaultCommentGenerator implements CommentGenerator {

    private Properties properties;
    private Properties systemPro;
    private boolean suppressDate;
    private boolean suppressAllComments;
    private String currentDateStr;

    public DefaultCommentGenerator() {
    super();
    properties = new Properties();
    systemPro = System.getProperties();
    suppressDate = false;
    suppressAllComments = false;
    currentDateStr = (new SimpleDateFormat(“yyyy-MM-dd”)).format(new Date());
    }

    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
    // add no file level comments by default
    return;
    }

    /**

    • Adds a suitable comment to warn users that the element was generated, and
    • when it was generated.
      */
      @Override
      public void addComment(XmlElement xmlElement) {
      return;
      }

    @Override
    public void addRootComment(XmlElement rootElement) {
    // add no document level comments by default
    return;
    }

    @Override
    public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable,
    Set set) {

    }

    @Override
    public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set set) {

    }

    @Override
    public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, Set set) {

    }

    @Override
    public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set set) {

    }

    @Override
    public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable, Set set) {

    }

    @Override
    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;
      }

    @Override
    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());
    innerClass.addJavaDocLine(” */");
    }

    @Override
    public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
    if (suppressAllComments) {
    return;
    }

     StringBuilder sb = new StringBuilder();
    
     innerEnum.addJavaDocLine("/**");
     //      addJavadocTag(innerEnum, false);
     sb.append(" * ");
     sb.append(introspectedTable.getFullyQualifiedTable());
     innerEnum.addJavaDocLine(sb.toString());
     innerEnum.addJavaDocLine(" */");
    

    }

    @Override
    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());
    
     //      addJavadocTag(field, false);
    
     field.addJavaDocLine(" */");
    

    }

    @Override
    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());
     field.addJavaDocLine(" */");
    

    }

    @Override
    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {

    }

    @Override
    public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
    if (suppressAllComments) {
    return;
    }
    // method.addJavaDocLine("/**");
    // addJavadocTag(method, false);
    // method.addJavaDocLine(" */");
    }

    @Override
    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());
    
     sb.setLength(0);
     sb.append(" * @return ");
     sb.append(introspectedColumn.getActualColumnName());
     sb.append(" ");
     sb.append(introspectedColumn.getRemarks());
     method.addJavaDocLine(sb.toString());
    
     //      addJavadocTag(method, false);
    
     method.addJavaDocLine(" */");
    

    }

    @Override
    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());
    
     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());
    
     //      addJavadocTag(method, false);
    
     method.addJavaDocLine(" */");
    

    }

    @Override
    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());
    
     sb.setLength(0);
     sb.append(" * @author ");
     sb.append(systemPro.getProperty("user.name"));
     sb.append(" ");
     sb.append(currentDateStr);
    
     //      addJavadocTag(innerClass, markAsDoNotDelete);
    
     innerClass.addJavaDocLine(" */");
    

    }
    }

3、修改mybatis-generator-core包中的文件,把编译好的class文件放入jar对就的路径中,建路径一定不能错:org/mybatis/generator/internal/DefaultCommentGenerator.java
package org.mybatis.generator.internal;
4、修改generatorConfig.xml和其它配制文件

部分截图如下
mybatis生成实体自带注释

生成结果如下
mybatis生成实体自带注释

不废话了,直接上代码,有兴趣的同学可以好好研究下

https://gitee.com/xing_xin/test.git