1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.internal;
17
18 import static org.mybatis.generator.internal.util.StringUtility.isTrue;
19
20 import java.util.Date;
21 import java.util.List;
22 import java.util.Properties;
23
24 import org.mybatis.generator.api.CommentGenerator;
25 import org.mybatis.generator.api.IntrospectedColumn;
26 import org.mybatis.generator.api.IntrospectedTable;
27 import org.mybatis.generator.api.dom.java.CompilationUnit;
28 import org.mybatis.generator.api.dom.java.Field;
29 import org.mybatis.generator.api.dom.java.InnerClass;
30 import org.mybatis.generator.api.dom.java.InnerEnum;
31 import org.mybatis.generator.api.dom.java.JavaElement;
32 import org.mybatis.generator.api.dom.java.Method;
33 import org.mybatis.generator.api.dom.java.Parameter;
34 import org.mybatis.generator.api.dom.java.TopLevelClass;
35 import org.mybatis.generator.api.dom.xml.TextElement;
36 import org.mybatis.generator.api.dom.xml.XmlElement;
37 import org.mybatis.generator.config.MergeConstants;
38 import org.mybatis.generator.config.PropertyRegistry;
39 import org.mybatis.generator.internal.util.StringUtility;
40
41
42
43
44
45
46 public class DefaultCommentGenerator implements CommentGenerator {
47
48
49 private Properties properties;
50
51
52 private boolean suppressDate;
53
54
55 private boolean suppressAllComments;
56
57
58
59 private boolean addRemarkComments;
60
61
62
63
64 public DefaultCommentGenerator() {
65 super();
66 properties = new Properties();
67 suppressDate = false;
68 suppressAllComments = false;
69 addRemarkComments = false;
70 }
71
72
73
74
75 public void addJavaFileComment(CompilationUnit compilationUnit) {
76
77 }
78
79
80
81
82
83
84
85 public void addComment(XmlElement xmlElement) {
86 if (suppressAllComments) {
87 return;
88 }
89
90 xmlElement.addElement(new TextElement("<!--"));
91
92 StringBuilder sb = new StringBuilder();
93 sb.append(" WARNING - ");
94 sb.append(MergeConstants.NEW_ELEMENT_TAG);
95 xmlElement.addElement(new TextElement(sb.toString()));
96 xmlElement
97 .addElement(new TextElement(
98 " This element is automatically generated by MyBatis Generator, do not modify."));
99
100 String s = getDateString();
101 if (s != null) {
102 sb.setLength(0);
103 sb.append(" This element was generated on ");
104 sb.append(s);
105 sb.append('.');
106 xmlElement.addElement(new TextElement(sb.toString()));
107 }
108
109 xmlElement.addElement(new TextElement("-->"));
110 }
111
112
113
114
115 public void addRootComment(XmlElement rootElement) {
116
117 }
118
119
120
121
122 public void addConfigurationProperties(Properties properties) {
123 this.properties.putAll(properties);
124
125 suppressDate = isTrue(properties
126 .getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
127
128 suppressAllComments = isTrue(properties
129 .getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
130
131 addRemarkComments = isTrue(properties
132 .getProperty(PropertyRegistry.COMMENT_GENERATOR_ADD_REMARK_COMMENTS));
133 }
134
135
136
137
138
139
140
141
142
143
144 protected void addJavadocTag(JavaElement javaElement,
145 boolean markAsDoNotDelete) {
146 javaElement.addJavaDocLine(" *");
147 StringBuilder sb = new StringBuilder();
148 sb.append(" * ");
149 sb.append(MergeConstants.NEW_ELEMENT_TAG);
150 if (markAsDoNotDelete) {
151 sb.append(" do_not_delete_during_merge");
152 }
153 String s = getDateString();
154 if (s != null) {
155 sb.append(' ');
156 sb.append(s);
157 }
158 javaElement.addJavaDocLine(sb.toString());
159 }
160
161
162
163
164
165
166
167
168 protected String getDateString() {
169 if (suppressDate) {
170 return null;
171 } else {
172 return new Date().toString();
173 }
174 }
175
176
177
178
179 public void addClassComment(InnerClass innerClass,
180 IntrospectedTable introspectedTable) {
181 if (suppressAllComments) {
182 return;
183 }
184
185 StringBuilder sb = new StringBuilder();
186 System.out.println("innerClass.getClass().getName() = " + innerClass.getType());
187
188 String shortName = innerClass.getType().getShortName();
189
190 innerClass.addJavaDocLine("/**");
191
192
193 if("GeneratedCriteria".equals(shortName)){
194 sb.append(" * 基本动态SQL对象,");
195 } else if ("Criterion".equals(shortName)){
196 sb.append(" * 动态SQL对象,");
197 }
198
199
200 sb.append(introspectedTable.getFullyQualifiedTable());
201 innerClass.addJavaDocLine(sb.toString());
202
203
204
205 innerClass.addJavaDocLine(" */");
206 }
207
208
209
210
211 @Override
212 public void addModelClassComment(TopLevelClass topLevelClass,
213 IntrospectedTable introspectedTable) {
214 if (suppressAllComments || !addRemarkComments) {
215 return;
216 }
217
218 StringBuilder sb = new StringBuilder();
219
220 topLevelClass.addJavaDocLine("/**");
221
222 String remarks = introspectedTable.getRemarks();
223 if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
224 topLevelClass.addJavaDocLine(" * Database Table Remarks:");
225 String[] remarkLines = remarks.split(System.getProperty("line.separator"));
226 for (String remarkLine : remarkLines) {
227 topLevelClass.addJavaDocLine(" * " + remarkLine);
228 }
229 }
230 topLevelClass.addJavaDocLine(" *");
231
232 topLevelClass
233 .addJavaDocLine(" * This class was generated by MyBatis Generator.");
234
235 sb.append(" * This class corresponds to the database table ");
236 sb.append(introspectedTable.getFullyQualifiedTable());
237 topLevelClass.addJavaDocLine(sb.toString());
238
239 addJavadocTag(topLevelClass, true);
240
241 topLevelClass.addJavaDocLine(" */");
242 }
243
244
245
246
247 public void addEnumComment(InnerEnum innerEnum,
248 IntrospectedTable introspectedTable) {
249 if (suppressAllComments) {
250 return;
251 }
252
253 StringBuilder sb = new StringBuilder();
254
255 innerEnum.addJavaDocLine("/**");
256
257
258 sb.append(" * This enum corresponds to the database table ");
259 sb.append(introspectedTable.getFullyQualifiedTable());
260 innerEnum.addJavaDocLine(sb.toString());
261
262
263
264 innerEnum.addJavaDocLine(" */");
265 }
266
267
268
269
270 public void addFieldComment(Field field,
271 IntrospectedTable introspectedTable,
272 IntrospectedColumn introspectedColumn) {
273 if (suppressAllComments) {
274 return;
275 }
276
277 field.addJavaDocLine("/**");
278 StringBuilder sb = new StringBuilder();
279
280 sb.append(" * ");
281 sb.append(introspectedColumn.getRemarks());
282 sb.append(",所属表字段为");
283 sb.append(introspectedTable.getFullyQualifiedTable());
284 sb.append('.');
285 sb.append(introspectedColumn.getActualColumnName());
286 field.addJavaDocLine(sb.toString());
287
288 field.addJavaDocLine(" */");
289 }
290
291
292
293
294 public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
295 if (suppressAllComments) {
296 return;
297 }
298
299 StringBuilder sb = new StringBuilder();
300
301 field.addJavaDocLine("/**");
302
303 String field_name = field.getName();
304 sb.append(" * ");
305 if("orderByClause".equals(field_name)){
306 sb.append("排序字段");
307 } else if("distinct".equals(field_name)){
308 sb.append("是否过滤重复数据");
309 } else if( field_name.endsWith(introspectedTable.getExampleType())){
310 sb.append("当前排序条件实例");
311 } else if("serialVersionUID".equals(field_name)){
312 sb.append("序列化ID");
313 }
314 sb.append(",");
315 sb.append(introspectedTable.getFullyQualifiedTable());
316 field.addJavaDocLine(sb.toString());
317
318
319
320 field.addJavaDocLine(" */");
321 }
322
323
324
325
326 public void addGeneralMethodComment(Method method,
327 IntrospectedTable introspectedTable) {
328 if (suppressAllComments) {
329 return;
330 }
331
332 StringBuilder sb = new StringBuilder();
333
334 method.addJavaDocLine("/**");
335
336
337
338 sb.append(" * ");
339 if (method.isConstructor()) {
340 sb.append(" 构造查询条件");
341 }
342 String method_name = method.getName();
343 if ("setOrderByClause".equals(method_name)) {
344 sb.append(" 设置排序字段");
345 } else if ("setDistinct".equals(method_name)) {
346 sb.append(" 设置过滤重复数据");
347 } else if ("getOredCriteria".equals(method_name)) {
348 sb.append(" 获取当前的查询条件实例");
349 } else if ("isDistinct".equals(method_name)) {
350 sb.append(" 是否过滤重复数据");
351 } else if ("getOrderByClause".equals(method_name)) {
352 sb.append(" 获取排序字段");
353 } else if ("createCriteria".equals(method_name)) {
354 sb.append(" 创建一个查询条件");
355 } else if ("createCriteriaInternal".equals(method_name)) {
356 sb.append(" 内部构建查询条件对象");
357 } else if ("clear".equals(method_name)) {
358 sb.append(" 清除查询条件");
359 } else if ("countByExample".equals(method_name)) {
360 sb.append(" 根据指定的条件获取数据库记录数");
361 } else if ("deleteByExample".equals(method_name)) {
362 sb.append(" 根据指定的条件删除数据库符合条件的记录");
363 } else if ("deleteByPrimaryKey".equals(method_name)) {
364 sb.append(" 根据主键删除数据库的记录");
365 } else if ("insert".equals(method_name)) {
366 sb.append(" 新写入数据库记录");
367 } else if ("insertSelective".equals(method_name)) {
368 sb.append(" 动态字段,写入数据库记录");
369 } else if ("selectByExample".equals(method_name)) {
370 sb.append(" 根据指定的条件查询符合条件的数据库记录");
371 } else if ("selectByPrimaryKey".equals(method_name)) {
372 sb.append(" 根据指定主键获取一条数据库记录");
373 } else if ("updateByExampleSelective".equals(method_name)) {
374 sb.append(" 动态根据指定的条件来更新符合条件的数据库记录");
375 } else if ("updateByExample".equals(method_name)) {
376 sb.append(" 根据指定的条件来更新符合条件的数据库记录");
377 } else if ("updateByPrimaryKeySelective".equals(method_name)) {
378 sb.append(" 动态字段,根据主键来更新符合条件的数据库记录");
379 } else if ("updateByPrimaryKey".equals(method_name)) {
380 sb.append(" 根据主键来更新符合条件的数据库记录");
381 }
382 sb.append(",");
383 sb.append(introspectedTable.getFullyQualifiedTable());
384 method.addJavaDocLine(sb.toString());
385
386 final List<Parameter> parameterList = method.getParameters();
387 if (!parameterList.isEmpty()) {
388 method.addJavaDocLine(" *");
389 if ("or".equals(method_name)) {
390 sb.append(" 增加或者的查询条件,用于构建或者查询");
391 }
392 } else {
393 if ("or".equals(method_name)) {
394 sb.append(" 创建一个新的或者查询条件");
395 }
396 }
397 String paramterName;
398 for (Parameter parameter : parameterList) {
399 sb.setLength(0);
400 sb.append(" * @param ");
401 paramterName = parameter.getName();
402 sb.append(paramterName);
403 if ("orderByClause".equals(paramterName)) {
404 sb.append(" 排序字段");
405 } else if ("distinct".equals(paramterName)) {
406 sb.append(" 是否过滤重复数据");
407 } else if ("criteria".equals(paramterName)) {
408 sb.append(" 过滤条件实例");
409 }
410 method.addJavaDocLine(sb.toString());
411 }
412
413
414
415
416 method.addJavaDocLine(" */");
417 }
418
419
420
421
422 public void addGetterComment(Method method,
423 IntrospectedTable introspectedTable,
424 IntrospectedColumn introspectedColumn) {
425 if (suppressAllComments) {
426 return;
427 }
428
429 StringBuilder sb = new StringBuilder();
430
431 method.addJavaDocLine("/**");
432
433
434 sb.append(" * 获取 ");
435 sb.append(introspectedColumn.getRemarks()).append(" 字段:");
436 sb.append(introspectedTable.getFullyQualifiedTable());
437 sb.append('.');
438 sb.append(introspectedColumn.getActualColumnName());
439 method.addJavaDocLine(sb.toString());
440
441 method.addJavaDocLine(" *");
442
443 sb.setLength(0);
444 sb.append(" * @return ");
445 sb.append(introspectedTable.getFullyQualifiedTable());
446 sb.append('.');
447 sb.append(introspectedColumn.getActualColumnName());
448 sb.append(", ");
449 sb.append(introspectedColumn.getRemarks());
450 method.addJavaDocLine(sb.toString());
451
452
453
454 method.addJavaDocLine(" */");
455 }
456
457
458
459
460 public void addSetterComment(Method method,
461 IntrospectedTable introspectedTable,
462 IntrospectedColumn introspectedColumn) {
463 if (suppressAllComments) {
464 return;
465 }
466
467 StringBuilder sb = new StringBuilder();
468
469 method.addJavaDocLine("/**");
470
471
472 sb.append(" * 设置 ");
473 sb.append(introspectedColumn.getRemarks()).append(" 字段:");
474 sb.append(introspectedTable.getFullyQualifiedTable());
475 sb.append('.');
476 sb.append(introspectedColumn.getActualColumnName());
477 method.addJavaDocLine(sb.toString());
478
479 method.addJavaDocLine(" *");
480
481 Parameter parm = method.getParameters().get(0);
482 sb.setLength(0);
483 sb.append(" * @param ");
484 sb.append(parm.getName());
485 sb.append(" ");
486 sb.append(introspectedTable.getFullyQualifiedTable());
487 sb.append('.');
488 sb.append(introspectedColumn.getActualColumnName());
489 sb.append(", ");
490 sb.append(introspectedColumn.getRemarks());
491 method.addJavaDocLine(sb.toString());
492
493
494
495 method.addJavaDocLine(" */");
496 }
497
498
499
500
501 public void addClassComment(InnerClass innerClass,
502 IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
503 if (suppressAllComments) {
504 return;
505 }
506
507 StringBuilder sb = new StringBuilder();
508
509 innerClass.addJavaDocLine("/**");
510
511 System.out.println("innerClass.getType().getShortName() = " + innerClass.getType().getShortName());
512 sb.append(" * 数据库表 ");
513 sb.append(introspectedTable.getFullyQualifiedTable());
514 sb.append("映射实体");
515 innerClass.addJavaDocLine(sb.toString());
516
517
518
519 innerClass.addJavaDocLine(" */");
520 }
521 }