MyCommentGenerator.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. package com.conpany.project;
  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. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11. import java.util.Properties;
  12. import static org.mybatis.generator.internal.util.StringUtility.isTrue;
  13. /**
  14. * @Title: MyCommentGenerator.java
  15. * @Package com.fendo.mybatis_generator_plus
  16. * @Description: mybatis generator 自定义comment生成器.
  17. * 基于MBG 1.3.5
  18. * @author fendo
  19. * @date 2017年10月5日 下午3:07:26
  20. * @version V1.0
  21. */
  22. public class MyCommentGenerator implements CommentGenerator{
  23. /**
  24. * properties配置文件
  25. */
  26. private Properties properties;
  27. /**
  28. * properties配置文件
  29. */
  30. private Properties systemPro;
  31. /*
  32. * 父类时间
  33. */
  34. private boolean suppressDate;
  35. /**
  36. * 父类所有注释
  37. */
  38. private boolean suppressAllComments;
  39. /**
  40. * 当前时间
  41. */
  42. private String currentDateStr;
  43. public MyCommentGenerator() {
  44. super();
  45. properties = new Properties();
  46. systemPro = System.getProperties();
  47. suppressDate = false;
  48. suppressAllComments = false;
  49. currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
  50. }
  51. /**
  52. * Java类的类注释
  53. */
  54. @Override
  55. public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
  56. if (suppressAllComments) {
  57. return;
  58. }
  59. StringBuilder sb = new StringBuilder();
  60. innerClass.addJavaDocLine("/**");
  61. sb.append(" * ");
  62. sb.append(introspectedTable.getFullyQualifiedTable());
  63. sb.append(" ");
  64. sb.append(getDateString());
  65. innerClass.addJavaDocLine(sb.toString().replace("\n", " "));
  66. innerClass.addJavaDocLine(" */");
  67. }
  68. /**
  69. * 为类添加注释
  70. */
  71. @Override
  72. public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
  73. if (suppressAllComments) {
  74. return;
  75. }
  76. StringBuilder sb = new StringBuilder();
  77. innerClass.addJavaDocLine("/**");
  78. sb.append(" * ");
  79. sb.append(" * ");
  80. sb.append(introspectedTable.getFullyQualifiedTable());
  81. innerClass.addJavaDocLine(sb.toString().replace("\n", " "));
  82. sb.setLength(0);
  83. sb.append(" * @author ");
  84. sb.append(systemPro.getProperty("user.name"));
  85. sb.append(" ");
  86. sb.append(currentDateStr);
  87. innerClass.addJavaDocLine(" */");
  88. }
  89. /**
  90. * Mybatis的Mapper.xml文件里面的注释
  91. */
  92. @Override
  93. public void addComment(XmlElement xmlElement) {
  94. }
  95. /**
  96. *
  97. *@Title addConfigurationProperties
  98. *@Description: 从该配置中的任何属性添加此实例的属性CommentGenerator配置。
  99. * 这个方法将在任何其他方法之前被调用。
  100. *@Author fendo
  101. *@Date 2017年10月5日 下午3:45:58
  102. *@return
  103. *@throws
  104. */
  105. @Override
  106. public void addConfigurationProperties(Properties properties) {
  107. this.properties.putAll(properties);
  108. suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
  109. suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
  110. }
  111. /**
  112. *
  113. *@Title getDateString
  114. *@Description: 此方法返回格式化的日期字符串以包含在Javadoc标记中和XML注释。 如果您不想要日期,则可以返回null在这些文档元素中。
  115. *@Author fendo
  116. *@Date 2017年10月5日 下午3:45:58
  117. *@return
  118. *@throws
  119. */
  120. protected String getDateString() {
  121. String result = null;
  122. if (!suppressDate) {
  123. result = currentDateStr;
  124. }
  125. return result;
  126. }
  127. /**
  128. *
  129. *@Title addJavadocTag
  130. *@Description: 此方法为其添加了自定义javadoc标签。
  131. *@Author fendo
  132. *@Date 2017年10月5日 下午3:49:05
  133. *@param javaElement
  134. *@param markAsDoNotDelete
  135. *@throws
  136. */
  137. protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
  138. javaElement.addJavaDocLine(" *");
  139. StringBuilder sb = new StringBuilder();
  140. sb.append(" * ");
  141. sb.append(MergeConstants.NEW_ELEMENT_TAG);
  142. if (markAsDoNotDelete) {
  143. sb.append(" do_not_delete_during_merge");
  144. }
  145. String s = getDateString();
  146. if (s != null) {
  147. sb.append(' ');
  148. sb.append(s);
  149. }
  150. javaElement.addJavaDocLine(sb.toString());
  151. }
  152. /**
  153. * 为枚举添加注释
  154. */
  155. @Override
  156. public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
  157. if (suppressAllComments) {
  158. return;
  159. }
  160. StringBuilder sb = new StringBuilder();
  161. innerEnum.addJavaDocLine("/**");
  162. sb.append(" * ");
  163. sb.append(introspectedTable.getFullyQualifiedTable());
  164. innerEnum.addJavaDocLine(sb.toString().replace("\n", " "));
  165. innerEnum.addJavaDocLine(" */");
  166. }
  167. /**
  168. * Java属性注释
  169. */
  170. @Override
  171. public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
  172. if (suppressAllComments) {
  173. return;
  174. }
  175. StringBuilder sb = new StringBuilder();
  176. field.addJavaDocLine("/**");
  177. sb.append(" * ");
  178. sb.append(introspectedTable.getFullyQualifiedTable());
  179. field.addJavaDocLine(sb.toString().replace("\n", " "));
  180. field.addJavaDocLine(" */");
  181. }
  182. /**
  183. * 为字段添加注释
  184. */
  185. @Override
  186. public void addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn) {
  187. if (suppressAllComments) {
  188. return;
  189. }
  190. StringBuilder sb = new StringBuilder();
  191. field.addJavaDocLine("/**");
  192. sb.append(" * ");
  193. sb.append(introspectedColumn.getRemarks());
  194. field.addJavaDocLine(sb.toString().replace("\n", " "));
  195. field.addJavaDocLine(" */");
  196. }
  197. /**
  198. * 普通方法的注释,这里主要是XXXMapper.java里面的接口方法的注释
  199. */
  200. @Override
  201. public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
  202. if (suppressAllComments) {
  203. return;
  204. }
  205. method.addJavaDocLine("/**");
  206. addJavadocTag(method, false);
  207. method.addJavaDocLine(" */");
  208. }
  209. /**
  210. * 给getter方法加注释
  211. */
  212. @Override
  213. public void addGetterComment(Method method, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn) {
  214. if (suppressAllComments) {
  215. return;
  216. }
  217. method.addJavaDocLine("/**");
  218. StringBuilder sb = new StringBuilder();
  219. sb.append(" * ");
  220. sb.append(introspectedColumn.getRemarks());
  221. method.addJavaDocLine(sb.toString().replace("\n", " "));
  222. sb.setLength(0);
  223. sb.append(" * @return ");
  224. sb.append(introspectedColumn.getActualColumnName());
  225. sb.append(" ");
  226. sb.append(introspectedColumn.getRemarks());
  227. method.addJavaDocLine(sb.toString().replace("\n", " "));
  228. method.addJavaDocLine(" */");
  229. }
  230. /**
  231. * 给Java文件加注释,这个注释是在文件的顶部,也就是package上面。
  232. */
  233. @Override
  234. public void addJavaFileComment(CompilationUnit compilationUnit) {
  235. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  236. compilationUnit.addFileCommentLine("/*");
  237. compilationUnit.addFileCommentLine("*");
  238. compilationUnit.addFileCommentLine("* "+compilationUnit.getType().getShortName()+".java");
  239. compilationUnit.addFileCommentLine("* Copyright(C) 2017-2020 fendo公司");
  240. compilationUnit.addFileCommentLine("* @date "+sdf.format(new Date())+"");
  241. compilationUnit.addFileCommentLine("*/");
  242. }
  243. /**
  244. * 为模型类添加注释
  245. */
  246. @Override
  247. public void addModelClassComment(TopLevelClass arg0, IntrospectedTable arg1) {
  248. }
  249. /**
  250. * 为调用此方法作为根元素的第一个子节点添加注释。
  251. */
  252. @Override
  253. public void addRootComment(XmlElement arg0) {
  254. }
  255. /**
  256. * 给setter方法加注释
  257. */
  258. @Override
  259. public void addSetterComment(Method method, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn) {
  260. if (suppressAllComments) {
  261. return;
  262. }
  263. method.addJavaDocLine("/**");
  264. StringBuilder sb = new StringBuilder();
  265. sb.append(" * ");
  266. sb.append(introspectedColumn.getRemarks());
  267. method.addJavaDocLine(sb.toString().replace("\n", " "));
  268. Parameter parm = method.getParameters().get(0);
  269. sb.setLength(0);
  270. sb.append(" * @param ");
  271. sb.append(parm.getName());
  272. sb.append(" ");
  273. sb.append(introspectedColumn.getRemarks());
  274. method.addJavaDocLine(sb.toString().replace("\n", " "));
  275. method.addJavaDocLine(" */");
  276. }
  277. }