国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - mybatis-generator如何自定義注釋生成

mybatis-generator如何自定義注釋生成

2021-12-23 13:20一頭磕在鍵盤上 Java教程

這篇文章主要介紹了mybatis-generator如何自定義注釋生成的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言

本文寫于2016.2,是基于mybatis-generator 1.3.2版本來完成的.

目前正式版的mybatis-generator已更新至1.3.5版本,本文同樣適用于1.3.3~1.3.5,不過CommentGenerator接口中新增一些方法需要額外實現,這點在使用本文提供的代碼示例時需要注意下,畢竟本文是實現的1.3.2的接口.

理論上以后mybatis-generator即便是再有更新,只要接口不變架構不變,那么本文依舊適用,畢竟原理是一樣的.

需要注意的是,從1.3.3版本開始在commentGenerator標簽下新增了addRemarkComments屬性(詳情請見commentGenerator),某種程度下可替代本文的一些功能,可以先試下效果再來決定是否來自己實現注釋生成.

-- 2016.08.27

完善了一些細節.對4.1出現的問題補充了新的解決方案.感謝評論區@Armeng 的提示.

-- 2016.09.28

之前第三步提供的運行方法只有maven方式,而java方式的放在了4.1中,對很多讀者造成了不便,主要對此進行了調整(調整后3.1為java方式、3.2為maven方式),順帶完善了下java方式運行的示例代碼.

-- 2018.12.26

正文

mybatis-generator 自動生成的代碼注釋是很反人類的,通常我們在使用的時候都是按照如下設置關閉注釋:

?
1
2
3
4
<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,并將其值設置為實現類的全路徑即可.

好吧,文檔里面是這么說明的,來看看具體怎么做吧.

事先聲明我用的是Eclipse+Maven來構建的.

1.實現CommentGenerator接口

當然首先你的工程中要有mybatis-generator-core這個jar包.相關pom如下:

?
1
2
3
4
5
6
<dependency>
 <groupId>org.mybatis.generator</groupId>
 <artifactId>mybatis-generator-core</artifactId>
 <!-- 注意版本.示例代碼使用的是1.3.2.采用更高版本自行再實現下新加的接口即可. -->
 <version>1.3.2</version>
</dependency>

正文,實現CommentGenerator接口,當然繼承默認的實現DefaultCommentGenerator也行.然后實現或者是重寫自己需要的方法.過程中最好是參照著DefaultCommentGenerator里面的代碼來做.

沒什么要多說的,下文是我的實現.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
import static org.mybatis.generator.internal.util.StringUtility.isTrue;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
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.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.InnerEnum;
import org.mybatis.generator.api.dom.java.JavaElement;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;
/**
 * mybatis generator 自定義comment生成器.
 * 基于MBG 1.3.2.
 * @author ZhangAY 2016-02-19
 *
 */
public class MyCommentGenerator implements CommentGenerator {
private Properties properties;
private Properties systemPro;
private boolean suppressDate;
private boolean suppressAllComments;
private String currentDateStr;
public MyCommentGenerator() {
    super();
    properties = new Properties();
    systemPro = System.getProperties();
    suppressDate = false;
    suppressAllComments = false;
    currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
}
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.
 */
public void addComment(XmlElement xmlElement) {
    return;
}
public void addRootComment(XmlElement rootElement) {
    // add no document level comments by default
    return;
}
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;
}
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(" */");
}
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(" */");
}
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(" */");
}
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(" */");
}
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
    if (suppressAllComments) {
        return;
    }
    //      method.addJavaDocLine("/**");
    //      addJavadocTag(method, false);
    //      method.addJavaDocLine(" */");
}
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(" */");
}
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(" */");
}
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(" */");
}

2.配置generator.xml

按照如下配置即可,注意type的值為 MyCommentGenerator類的全路徑.

?
1
2
<commentGenerator type="MyCommentGenerator">
</commentGenerator>

3.運行

MBG(注: 即 MyBatis Generator 的英文縮寫)支持多種方式運行,本文只羅列兩種(java方式及maven方式)

如果需要以命令行或其他方式運行參照官網文檔:

方法1. java方式(個人推薦)

直接以main方法運行,主要是省事不易出錯.代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static void main(String[] args) {
 // 執行中的異常信息會保存在warnings中
 List<String> warnings = new ArrayList<String>();
    try {
        // true:生成的文件覆蓋之前的
        boolean overwrite = true;
        // 讀取配置,構造 Configuration 對象. 
        // 如果不想使用配置文件的話,也可以直接來 new Configuration(),然后給相應屬性賦值.
        File configFile = new File("generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (InvalidConfigurationException e) {
        e.printStackTrace();
    } catch (XMLParserException e) {
        e.printStackTrace();
    }
    
    for (String warning : warnings){
        System.out.println(warning);
    }
}

方法2. maven方式

將MyCommentGenerator類打包生成jar,添加到maven庫中,類似如下:

?
1
2
3
4
5
<dependency>
 <groupId>com.saddestmoon</groupId>
 <artifactId>MyCommentGenerator</artifactId>
 <version>0.1.SNAPSHOT</version>
</dependency>

mybatis-generator-maven-plugin插件添加相關依賴:

?
1
2
3
4
5
6
7
8
9
10
11
12
<plugin>
 <groupId>org.mybatis.generator</groupId>
 <artifactId>mybatis-generator-maven-plugin</artifactId>
 <version>1.3.2</version>
 <dependencies>
  <dependency>
   <groupId>com.saddestmoon</groupId>
   <artifactId>MyCommentGenerator</artifactId>
   <version>0.1.SNAPSHOT</version>
  </dependency>
 </dependencies>
</plugin>

然后工程右鍵,run as -->maven,填寫相關參數,運行mybatis generator.

最后自動生成的代碼應該是類似如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * 文件代碼
 */
private String fileCd;
/**
 * 文件代碼
 * @return FILE_CD 文件代碼
 */
public String getFileCd() {
    return fileCd;
}
/**
 * 文件代碼
 * @param fileCd 文件代碼
 */
public void setFileCd(String fileCd) {
    this.fileCd = fileCd;
}

4.可能出現的問題

大多數情況下,到第三步就算是結束了.下面的,都是踩的坑.

4.1 提示找不到MyCommentGenerator

這個一般是使用Maven命令運行MBG時才會出現的錯誤.

原因是mybatis-generator-core與MyCommentGenerator不在同一個ClassPath下,解決方法如下:

參照第3.2,一定要打包生成jar,然后在pom文件mybatis-generator-maven-plugin插件中添加相關依賴.

使用Java方式(參照3.1)運行MBG可以避免該問題,也不用打包成jar:

4.2 獲取不到字段注釋

沒錯,就是introspectedColumn.getRemarks()獲取不到字段的注釋,生成的javabean里面應該顯示字段注釋的地方顯示的是null.

配置文件中我們對<jdbcConnection>做如下修改即可:

?
1
2
3
4
5
6
7
<jdbcConnection driverClass="${driver}"
 connectionURL="{url}" userId="${username}" password="${password}">
 <!-- 針對oracle數據庫 -->
 <property name="remarksReporting" value="true"></property>
 <!-- 針對mysql數據庫 -->
    <property name="useInformationSchema" value="true"></property>
</jdbcConnection>

問題解決

關于此問題的詳細解決思路,參見另一篇文章 Mybatis Generator 獲取不到字段注釋.如果你用的不是Oracle或Mysql,那么最好看下.

4.3生成的javabean中字段注釋中文亂碼

這個需要手動設置生成文件的編碼.

在官方文檔<context>一節中<Property >有相關說明,如下.

javaFileEncoding Use this property to specify an encoding to use when working with Java files. Newly generated Java files will be written to the file system in this encoding, and existing Java files will be read with this encoding when performing a merge. If not specified, then the platform default encoding will be used.

所以在配置文件<context>中添加如下子元素即可:

?
1
<property name="javaFileEncoding" value="UTF-8"/>

注意:<context>下的子元素是必須按照規定順序來的,否則運行會報錯!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_21251983/article/details/50731368

延伸 · 閱讀

精彩推薦
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
764
主站蜘蛛池模板: 91天堂网 | 成人精品一区二区三区 | 国产伦理一区 | 欧美二三区| 狠狠爱亚洲 | 色婷婷精品久久二区二区蜜臂av | 成人激情视频 | 亚洲精品国产一区 | 欧美亚洲国产激情 | 波多野结衣一二三四区 | 欧美日韩美女 | 亚洲福利一区二区 | 免费一级毛片 | 视频在线一区二区 | 免费视频成人国产精品网站 | 91精品国产91久久久久久 | 国产日 | 97理论片| 伊人春色在线播放 | 国内精品一区二区三区 | 日韩免费在线观看视频 | 观看av| 91中文字幕在线观看 | 中文字幕在线视频第一页 | 亚洲精美视频 | av看片网站 | 成人片网址 | 亚洲国产二区 | 午夜在线影院 | 午夜在线影院 | 亚洲伦理 | 国产免费av网站 | 日韩午夜激情视频 | 国产噜噜噜噜噜久久久久久久久 | 欧美美女爱爱 | 日韩成人影片 | 国内偷拍av | 亚洲a在线观看 | 精品无码久久久久久久动漫 | 久久精品一区二区三区四区 | 91精品国产综合久久久久久 |