一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - MyBatis Generator 自定義生成注釋的方法

MyBatis Generator 自定義生成注釋的方法

2021-06-01 14:27mizhoux Java教程

這篇文章主要介紹了MyBatis Generator 自定義生成注釋的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近做項目,orm 使用的是 mybatis,為了偷懶,我自然而然的想到了使用 mybatis generator(mbg)來生成數據庫表對應的實體代碼和 mapper 代碼。于是做了如下的配置(對 mbg 配置不熟悉的同學可以參考 mybatis generator最完整配置詳解):

?
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
<?xml version="1.0" encoding="utf-8"?>
<!doctype generatorconfiguration public
    "-//mybatis.org//dtd mybatis generator configuration 1.0//en"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
<generatorconfiguration>
  <!-- 指定數據庫驅動的jdbc驅動jar包的位置 -->
  <classpathentry location="./mysql-connector-java-5.1.40.jar" />
 
  <context id="mysql" defaultmodeltype="hierarchical" targetruntime="mybatis3simple" >
    <!-- 生成的 java 文件的編碼 -->
    <property name="javafileencoding" value="utf-8"/>
    <!-- 格式化 java 代碼 -->
    <property name="javaformatter" value="org.mybatis.generator.api.dom.defaultjavaformatter"/>
    <!-- 格式化 xml 代碼 -->
    <property name="xmlformatter" value="org.mybatis.generator.api.dom.defaultxmlformatter"/>
 
    <!-- 配置數據庫連接 -->
    <jdbcconnection driverclass="com.mysql.jdbc.driver" connectionurl="jdbc:mysql://localhost:3306/test?characterencoding=utf-8" userid="root" password="123456">
    </jdbcconnection>
 
    <!-- 生成實體的位置 -->
    <javamodelgenerator targetpackage="me.mizhoux.model" targetproject="src/main/java">
      <property name="enablesubpackages" value="true"/>
    </javamodelgenerator>
 
    <!-- 生成 mapper 接口的位置 -->
    <sqlmapgenerator targetpackage="me.mizhoux.mapper" targetproject="src/main/java">
      <property name="enablesubpackages" value="true"/>
    </sqlmapgenerator>
 
    <!-- 生成 mapper xml 的位置 -->
    <javaclientgenerator targetpackage="me.mizhoux.mapper" type="xmlmapper" targetproject="src/main/java">
      <property name="enablesubpackages" value="true"/>
    </javaclientgenerator>
 
    <!-- 設置數據庫的表名和實體類名 -->
    <table tablename="t_user" domainobjectname="user">
      <!-- generatedkey用于生成生成主鍵的方法 -->
      <generatedkey column="id" sqlstatement="select last_insert_id()"/>
    </table>
 
  </context>
 
</generatorconfiguration>

數據庫建庫建表的代碼:

?
1
2
3
4
5
6
7
8
9
10
create schema `db_test` default character set utf8 collate utf8_unicode_ci ;
 
create table `db_test`.`t_user` (
 `id` int not null auto_increment comment '用戶 id',
 `username` varchar(30) null comment '用戶名稱',
 `password` varchar(20) null comment '用戶密碼',
 `birthday` date null comment '用戶生日',
 primary key (`id`),
 unique index `username_unique` (`username` asc)
) comment = '用戶';

開開心心,執行命令,開始生成代碼:

java -jar mybatis-generator-core-1.3.7.jar -configfile generatorconfig.xml -overwrite

然后查看生成的 java 實體類:

MyBatis Generator 自定義生成注釋的方法

看著這個注釋,讓我有點糾結啊 —— 為什么不是數據庫中每個字段對應的注釋呢?查找相關資料,得知 mbg 生成的是由 org.mybatis.generator.api.commentgenerator 來控制的。這是一個接口,mbg 的默認實現類是做 org.mybatis.generator.internal.defaultcommentgenerator。當你在 generatorconfig.xml 中配置了 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
public class defaultcommentgenerator implements commentgenerator {
  // 屬性,即配置在 commentgenerator 標簽之內的 property 標簽
  private properties properties;
  // 是否不生成日期
  private boolean suppressdate;
  // 是否不生成注釋
  private boolean suppressallcomments;
  // 是否添加數據庫內的注釋
  private boolean addremarkcomments;
  // 日期格式化
  private simpledateformat dateformat;
 
  public defaultcommentgenerator() {
    super();
    properties = new properties();
    suppressdate = false;
    suppressallcomments = false;
    addremarkcomments = false;
  }
 
  @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));
 
    addremarkcomments = istrue(properties
        .getproperty(propertyregistry.comment_generator_add_remark_comments));
    
    string dateformatstring = properties.getproperty(propertyregistry.comment_generator_date_format);
    if (stringutility.stringhasvalue(dateformatstring)) {
      dateformat = new simpledateformat(dateformatstring);
    }
  }
  
  // 其他代碼
  ...
}

addremarkcomments 這個屬性,看來就是用來生成數據庫注釋用的 —— 好開心,那把它設置為 true 試試:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<generatorconfiguration>
  <!-- 指定數據庫驅動的jdbc驅動jar包的位置 -->
  <classpathentry location="./mysql-connector-java-5.1.40.jar" />
  
  <context id="mysql" defaultmodeltype="hierarchical" targetruntime="mybatis3simple" >
    <property name="javafileencoding" value="utf-8"/>
    <!-- 其他 property -->
 
    <commentgenerator>
      <property name="suppressdate" value="true"/>
      <property name="addremarkcomments" value="true"/>
    </commentgenerator>
    
    ...
  </context>
</generatorconfiguration>

運行命令:

java -jar mybatis-generator-core-1.3.7.jar -configfile generatorconfig.xml -overwrite

MyBatis Generator 自定義生成注釋的方法

數據庫注釋倒是拿到了,但是生成的一堆其他信息,看著實在是太扎眼了。查看源碼,發現這些內容已經寫死在 defaultcommentgenerator 中了,沒有辦法自定義。

MyBatis Generator 自定義生成注釋的方法

自己動手豐衣足食,我們為啥不自己寫個類實現 commentgenerator 接口,然后自定義自己想要的注釋呢。查看 commentgenerator 的 dtd,發現正好 commentgenerator 有個 type 屬性,可以用來指定自己的注釋實現類:

MyBatis Generator 自定義生成注釋的方法

查看 commentgenerator 接口,發現里面的方法非常多,不僅包含了生成 java 實體注釋對應的方法,還包括了生成 xml 中注釋的方法。所以我們先寫一個默認的實現類,實現commentgenerator 接口,但不做任何操作 —— 因為 defaultcommentgenerator 本文已經存在了,為了避免混淆,就叫它simplecommentgenerator吧。然后定義我們自己的注釋類,mysqlcommentgenerator,繼承 simplecommentgenerator,重寫我們需要的方法:

?
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
public class mysqlcommentgenerator extends simplecommentgenerator {
 
  private properties properties;
 
  public mysqlcommentgenerator() {
    properties = new properties();
  }
 
  @override
  public void addconfigurationproperties(properties properties) {
    // 獲取自定義的 properties
    this.properties.putall(properties);
  }
 
  @override
  public void addmodelclasscomment(toplevelclass toplevelclass, introspectedtable introspectedtable) {
    string author = properties.getproperty("author");
    string dateformat = properties.getproperty("dateformat", "yyyy-mm-dd");
    simpledateformat dateformatter = new simpledateformat(dateformat);
 
    // 獲取表注釋
    string remarks = introspectedtable.getremarks();
 
    toplevelclass.addjavadocline("/**");
    toplevelclass.addjavadocline(" * " + remarks);
    toplevelclass.addjavadocline(" *");
    toplevelclass.addjavadocline(" * @author " + author);
    toplevelclass.addjavadocline(" * @date " + dateformatter.format(new date()));
    toplevelclass.addjavadocline(" */");
  }
 
  @override
  public void addfieldcomment(field field, introspectedtable introspectedtable, introspectedcolumn introspectedcolumn) {
    // 獲取列注釋
    string remarks = introspectedcolumn.getremarks();
    field.addjavadocline("/**");
    field.addjavadocline(" * " + remarks);
    field.addjavadocline(" */");
  }
}

因為我們現在要使用到我們自己自定義的 commentgenerator ,所以我們 通過代碼的方式來操作 mbg

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class generator {
 
  public static void main( string[] args ) throws exception {
    list<string> warnings = new arraylist<>();
    file configfile = new file("generatorconfig.xml");
    configurationparser cp = new configurationparser(warnings);
    configuration config = cp.parseconfiguration(configfile);
    defaultshellcallback callback = new defaultshellcallback(true);
    mybatisgenerator mybatisgenerator = new mybatisgenerator(config, callback, warnings);
    mybatisgenerator.generate(null);
  }
 
}

然后配置 generatorconfig.xml設置我們自己的注釋生成器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<!doctype generatorconfiguration public
    "-//mybatis.org//dtd mybatis generator configuration 1.0//en"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 
<generatorconfiguration>
  <!-- 指定數據庫驅動的jdbc驅動jar包的位置 -->
  <!-- 不再需要,因為 jar 包已經在 classpath 中
  <classpathentry location="./mysql-connector-java-5.1.40.jar" />
  -->
 
  <context id="mysql" defaultmodeltype="hierarchical" targetruntime="mybatis3simple" >
    ...
    
    <!-- 自定義注釋生成器 -->
    <commentgenerator type="me.mizhoux.mbgcomment.mysqlcommentgenerator">
      <property name="author" value="michael chow"/>
      <property name="dateformat" value="yyyy/mm/dd"/>
    </commentgenerator>
    
    ...
  </context>
 
</generatorconfiguration>

完整的 maven 項目在 我的 github。現在,我們運行主類 generator,成功生成了數據庫中的注釋:

MyBatis Generator 自定義生成注釋的方法

等等,好像有點不對勁!

MyBatis Generator 自定義生成注釋的方法

類的注釋怎么沒有了!

想來應該是 jdbc 連接 mysql 的時候需要添加什么屬性才能獲取表的注釋,上網查詢,發現是 useinformationschema,需要將其設置為 true(看來是 mbg 給自己的 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
<?xml version="1.0" encoding="utf-8"?>
<!doctype generatorconfiguration public
    "-//mybatis.org//dtd mybatis generator configuration 1.0//en"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 
<generatorconfiguration>
  <context id="mysql" defaultmodeltype="hierarchical" targetruntime="mybatis3simple" >
    ...
    
    <!-- 自定義注釋生成器 -->
    <commentgenerator type="me.mizhoux.mbgcomment.mysqlcommentgenerator">
      <property name="author" value="michael chow"/>
      <property name="dateformat" value="yyyy/mm/dd"/>
    </commentgenerator>
 
    <!-- 配置數據庫連接 -->
    <jdbcconnection driverclass="com.mysql.jdbc.driver" connectionurl="jdbc:mysql://localhost:3306/test?characterencoding=utf-8" userid="root" password="123456">
       <!-- 設置 useinformationschema 屬性為 true -->
       <property name="useinformationschema" value="true" />
    </jdbcconnection>
    
    ...
  </context>
</generatorconfiguration>

然后再次運行主類 generator

MyBatis Generator 自定義生成注釋的方法

成功的生成了類主食和字段注釋~

我這里并沒有處理注釋是多行文本的情況 —— 留給有興趣的讀者吧~

小項目地址:https://github.com/mizhoux/mbg-comment

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000016525887

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 范冰冰特黄xx大片 | 久久se精品一区二区国产 | 欧美午夜视频一区二区三区 | 美国玩尿眼道videos | 四虎影院免费视频 | 国产hd老头老太婆 | 黑人粗长巨茎小说 | 三级黄色片在线观看 | 99在线资源 | 日本老妇和子乱视频 | 日本人添下面的全过程 | 久久99影院 | 精品区2区3区4区产品乱码9 | 荡女人人爱 | 欧美一区二区三区精品国产 | 草久久网 | 美女被绑着吸下部的故事 | 奇米激情| 污小说免费 | 海派甜心完整版在线观看 | 久久99热成人精品国产 | 校园全肉高h湿一女多男 | 久久成人亚洲 | 女性性色生活片免费观看 | 欧美久久一区二区三区 | 白丝h视频 | 日本一在线中文字幕天堂 | 国产无套在线播放 | 和两个男人玩3p好爽视频 | 欧美伊人久久久久久久久影院 | 欧美日韩国产一区二区三区伦 | 九九九九在线精品免费视频 | 亚洲一成人毛片 | 武侠古典久久亚洲精品 | 幻女free性俄罗斯第一次摘花 | 国产成人亚洲影视在线 | 莫莉瑞典1977k | 国产一级特黄在线播放 | 国产黄频在线观看高清免费 | 国产亚洲小视频 | 女人爽到喷水的视频免费看 |