天天看點

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;

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;

}

@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));
           

}

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

}

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

}

@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("");

}

@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

mybatis生成實體自帶注釋

繼續閱讀