最近做的项目发现没有中文注释,故查找资料,特此记录。

本文所用的是基于mybatis-generator 1.3.2版本来完成的。

mybatis-generator 自动生成的代码注释是很反人类的,通常我们在使用的时候都是按照如下设置关闭注释:

<commentGenerator>
    <!--  关闭自动生成的注释  -->
    <property name="suppressAllComments" value="true" />
</commentGenerator>

不过在mybatis-generator官方文档中commentGenerator一节中有这么一段说明:The default implementation is org.mybatis.generator.internal.DefaultCommentGenerator. The default implementation is designed for extensibility if you only want to modify certain behaviors.

既然是可扩展的,那么该如何做呢?文档中也有说明,只需要实现 org.mybatis.generator.api.CommentGenerator接口,同时有一个public的构造函数,然后为commentGenerator添加属性type,并将其值设置为实现类的全路径即可。

1.实现CommentGenerator接口

当然首先你的工程中要有mybatis-generator-core这个jar包.相关pom如下:

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <!-- 注意版本.这里我使用的是1.3.2 -->
    <version>1.3.2</version>
</dependency>

正文,实现CommentGenerator接口,当然继承默认的实现DefaultCommentGenerator也行.然后实现或者是重写自己需要的方法.过程中最好是参照着DefaultCommentGenerator里面的代码来做.

没什么要多说的,下文是我的实现.

  1 package com.test.util;
  2 import org.mybatis.generator.api.CommentGenerator;
  3 import org.mybatis.generator.api.IntrospectedColumn;
  4 import org.mybatis.generator.api.IntrospectedTable;
  5 import org.mybatis.generator.api.dom.java.*;
  6 import org.mybatis.generator.api.dom.xml.XmlElement;
  7 import org.mybatis.generator.config.MergeConstants;
  8 import org.mybatis.generator.config.PropertyRegistry;
  9 
 10 import java.text.SimpleDateFormat;
 11 import java.util.Date;
 12 import java.util.Properties;
 13 
 14 import static org.mybatis.generator.internal.util.StringUtility.isTrue;
 15 
 16 /**
 17  * mybatis generator 自定义comment生成器.
 18  * 基于MBG 1.3.2. 
 19  *
 20  */
 21 public class MyCommentGenerator implements CommentGenerator {
 22 
 23     private Properties properties;
 24     private Properties systemPro;
 25     private boolean suppressDate;
 26     private boolean suppressAllComments;
 27     private String currentDateStr;
 28 
 29     public MyCommentGenerator() {
 30         super();
 31         properties = new Properties();
 32         systemPro = System.getProperties();
 33         suppressDate = false;
 34         suppressAllComments = false;
 35         currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
 36     }
 37 
 38     public void addJavaFileComment(CompilationUnit compilationUnit) {
 39         // add no file level comments by default
 40         return;
 41     }
 42 
 43     /**
 44      * Adds a suitable comment to warn users that the element was generated, and
 45      * when it was generated.
 46      */
 47     public void addComment(XmlElement xmlElement) {
 48         return;
 49     }
 50 
 51     public void addRootComment(XmlElement rootElement) {
 52         // add no document level comments by default
 53         return;
 54     }
 55 
 56     public void addConfigurationProperties(Properties properties) {
 57         this.properties.putAll(properties);
 58 
 59         suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
 60 
 61         suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
 62     }
 63 
 64     /**
 65      * This method adds the custom javadoc tag for. You may do nothing if you do
 66      * not wish to include the Javadoc tag - however, if you do not include the
 67      * Javadoc tag then the Java merge capability of the eclipse plugin will
 68      * break.
 69      *
 70      * @param javaElement the java element
 71      */
 72     protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
 73         javaElement.addJavaDocLine(" *");
 74         StringBuilder sb = new StringBuilder();
 75         sb.append(" * ");
 76         sb.append(MergeConstants.NEW_ELEMENT_TAG);
 77         if (markAsDoNotDelete) {
 78             sb.append(" do_not_delete_during_merge");
 79         }
 80         String s = getDateString();
 81         if (s != null) {
 82             sb.append(' ');
 83             sb.append(s);
 84         }
 85         javaElement.addJavaDocLine(sb.toString());
 86     }
 87 
 88     /**
 89      * This method returns a formated date string to include in the Javadoc tag
 90      * and XML comments. You may return null if you do not want the date in
 91      * these documentation elements.
 92      *
 93      * @return a string representing the current timestamp, or null
 94      */
 95     protected String getDateString() {
 96         String result = null;
 97         if (!suppressDate) {
 98             result = currentDateStr;
 99         }
100         return result;
101     }
102 
103     public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
104         if (suppressAllComments) {
105             return;
106         }
107         StringBuilder sb = new StringBuilder();
108         innerClass.addJavaDocLine("/**");
109         sb.append(" * ");
110         sb.append(introspectedTable.getFullyQualifiedTable());
111         sb.append(" ");
112         sb.append(getDateString());
113         innerClass.addJavaDocLine(sb.toString());
114         innerClass.addJavaDocLine(" */");
115     }
116 
117     public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
118         if (suppressAllComments) {
119             return;
120         }
121 
122         StringBuilder sb = new StringBuilder();
123 
124         innerEnum.addJavaDocLine("/**");
125         //      addJavadocTag(innerEnum, false);
126         sb.append(" * ");
127         sb.append(introspectedTable.getFullyQualifiedTable());
128         innerEnum.addJavaDocLine(sb.toString());
129         innerEnum.addJavaDocLine(" */");
130     }
131 
132     public void addFieldComment(Field field, IntrospectedTable introspectedTable,
133                                 IntrospectedColumn introspectedColumn) {
134         if (suppressAllComments) {
135             return;
136         }
137 
138         StringBuilder sb = new StringBuilder();
139 
140         field.addJavaDocLine("/**");
141         sb.append(" * ");
142         sb.append(introspectedColumn.getRemarks());
143         field.addJavaDocLine(sb.toString());
144 
145         //      addJavadocTag(field, false);
146 
147         field.addJavaDocLine(" */");
148     }
149 
150     public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
151         if (suppressAllComments) {
152             return;
153         }
154 
155         StringBuilder sb = new StringBuilder();
156 
157         field.addJavaDocLine("/**");
158         sb.append(" * ");
159         sb.append(introspectedTable.getFullyQualifiedTable());
160         field.addJavaDocLine(sb.toString());
161         field.addJavaDocLine(" */");
162     }
163 
164     public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
165         if (suppressAllComments) {
166             return;
167         }
168         //      method.addJavaDocLine("/**");
169         //      addJavadocTag(method, false);
170         //      method.addJavaDocLine(" */");
171     }
172 
173     public void addGetterComment(Method method, IntrospectedTable introspectedTable,
174                                  IntrospectedColumn introspectedColumn) {
175         if (suppressAllComments) {
176             return;
177         }
178 
179         method.addJavaDocLine("/**");
180 
181         StringBuilder sb = new StringBuilder();
182         sb.append(" * 获取");
183         sb.append(introspectedColumn.getRemarks());
184         method.addJavaDocLine(sb.toString());
185 
186         sb.setLength(0);
187         sb.append(" * @return ");
188         sb.append(introspectedColumn.getActualColumnName());
189         sb.append(" ");
190         sb.append(introspectedColumn.getRemarks());
191         method.addJavaDocLine(sb.toString());
192 
193         //      addJavadocTag(method, false);
194 
195         method.addJavaDocLine(" */");
196     }
197 
198     public void addSetterComment(Method method, IntrospectedTable introspectedTable,
199                                  IntrospectedColumn introspectedColumn) {
200         if (suppressAllComments) {
201             return;
202         }
203 
204 
205         method.addJavaDocLine("/**");
206         StringBuilder sb = new StringBuilder();
207         sb.append(" * 设置");
208         sb.append(introspectedColumn.getRemarks());
209         method.addJavaDocLine(sb.toString());
210 
211         Parameter parm = method.getParameters().get(0);
212         sb.setLength(0);
213         sb.append(" * @param ");
214         sb.append(parm.getName());
215         sb.append(" ");
216         sb.append(introspectedColumn.getRemarks());
217         method.addJavaDocLine(sb.toString());
218 
219         //      addJavadocTag(method, false);
220 
221         method.addJavaDocLine(" */");
222     }
223 
224     public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
225         if (suppressAllComments) {
226             return;
227         }
228 
229         StringBuilder sb = new StringBuilder();
230 
231         innerClass.addJavaDocLine("/**");
232         sb.append(" * ");
233         sb.append(introspectedTable.getFullyQualifiedTable());
234         innerClass.addJavaDocLine(sb.toString());
235 
236         sb.setLength(0);
237         sb.append(" * @author ");
238         sb.append(systemPro.getProperty("user.name"));
239         sb.append(" ");
240         sb.append(currentDateStr);
241 
242         //      addJavadocTag(innerClass, markAsDoNotDelete);
243 
244         innerClass.addJavaDocLine(" */");
245     }
246 }
View Code

相关文章:

  • 2021-07-01
  • 2022-12-23
  • 2020-02-25
  • 2022-01-05
  • 2022-01-27
  • 2021-11-03
  • 2021-10-20
  • 2021-09-05
猜你喜欢
  • 2022-01-26
  • 2021-08-19
  • 2022-02-12
  • 2021-09-04
  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案