最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年09月27日 10:44:14   作者:mizhoux  
這篇文章主要介紹了MyBatis Generator 自定義生成注釋的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

最近做項(xiàng)目,ORM 使用的是 MyBatis,為了偷懶,我自然而然的想到了使用 MyBatis Generator(MBG)來生成數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體代碼和 Mapper 代碼。于是做了如下的配置(對(duì) MBG 配置不熟悉的同學(xué)可以參考 Mybatis Generator最完整配置詳解):

<?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>
  <!-- 指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)的jdbc驅(qū)動(dòng)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"/>

    <!-- 配置數(shù)據(jù)庫(kù)連接 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" userId="root" password="123456">
    </jdbcConnection>

    <!-- 生成實(shí)體的位置 -->
    <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>

    <!-- 設(shè)置數(shù)據(jù)庫(kù)的表名和實(shí)體類名 -->
    <table tableName="t_user" domainObjectName="User">
      <!-- generatedKey用于生成生成主鍵的方法 -->
      <generatedKey column="id" sqlStatement="SELECT LAST_INSERT_ID()"/>
    </table>

  </context>

</generatorConfiguration>

數(shù)據(jù)庫(kù)建庫(kù)建表的代碼:

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 = '用戶';

開開心心,執(zhí)行命令,開始生成代碼:

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

然后查看生成的 Java 實(shí)體類:

看著這個(gè)注釋,讓我有點(diǎn)糾結(jié)啊 —— 為什么不是數(shù)據(jù)庫(kù)中每個(gè)字段對(duì)應(yīng)的注釋呢?查找相關(guān)資料,得知 MBG 生成的是由 org.mybatis.generator.api.CommentGenerator 來控制的。這是一個(gè)接口,MBG 的默認(rèn)實(shí)現(xiàn)類是做 org.mybatis.generator.internal.DefaultCommentGenerator。當(dāng)你在 generatorConfig.xml 中配置了 commentGenerator 標(biāo)簽,那么默認(rèn)狀態(tài)下,生成注釋的工作,將由 DefaultCommentGenerator來完成。 所以我們來查看下這個(gè) DefaultCommentGenerator 的源碼:

public class DefaultCommentGenerator implements CommentGenerator {
  // 屬性,即配置在 commentGenerator 標(biāo)簽之內(nèi)的 Property 標(biāo)簽
  private Properties properties;
  // 是否不生成日期
  private boolean suppressDate;
  // 是否不生成注釋
  private boolean suppressAllComments;
  // 是否添加數(shù)據(jù)庫(kù)內(nèi)的注釋
  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 這個(gè)屬性,看來就是用來生成數(shù)據(jù)庫(kù)注釋用的 —— 好開心,那把它設(shè)置為 true 試試:

<generatorConfiguration>
  <!-- 指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)的jdbc驅(qū)動(dòng)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>

運(yùn)行命令:

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

數(shù)據(jù)庫(kù)注釋倒是拿到了,但是生成的一堆其他信息,看著實(shí)在是太扎眼了。查看源碼,發(fā)現(xiàn)這些內(nèi)容已經(jīng)寫死在 DefaultCommentGenerator 中了,沒有辦法自定義。

自己動(dòng)手豐衣足食,我們?yōu)樯恫蛔约簩憘€(gè)類實(shí)現(xiàn) CommentGenerator 接口,然后自定義自己想要的注釋呢。查看 commentGenerator 的 DTD,發(fā)現(xiàn)正好 commentGenerator 有個(gè) type 屬性,可以用來指定自己的注釋實(shí)現(xiàn)類:

查看 CommentGenerator 接口,發(fā)現(xiàn)里面的方法非常多,不僅包含了生成 Java 實(shí)體注釋對(duì)應(yīng)的方法,還包括了生成 XML 中注釋的方法。所以我們先寫一個(gè)默認(rèn)的實(shí)現(xiàn)類,實(shí)現(xiàn)CommentGenerator 接口,但不做任何操作 —— 因?yàn)?DefaultCommentGenerator 本文已經(jīng)存在了,為了避免混淆,就叫它SimpleCommentGenerator吧。然后定義我們自己的注釋類,MySQLCommentGenerator,繼承 SimpleCommentGenerator,重寫我們需要的方法:

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(" */");
  }
}

因?yàn)槲覀儸F(xiàn)在要使用到我們自己自定義的 CommentGenerator ,所以我們 通過代碼的方式來操作 MBG

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設(shè)置我們自己的注釋生成器:

<?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>
  <!-- 指定數(shù)據(jù)庫(kù)驅(qū)動(dòng)的jdbc驅(qū)動(dòng)jar包的位置 -->
  <!-- 不再需要,因?yàn)?jar 包已經(jīng)在 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 項(xiàng)目在 我的 GitHub?,F(xiàn)在,我們運(yùn)行主類 Generator,成功生成了數(shù)據(jù)庫(kù)中的注釋:

等等,好像有點(diǎn)不對(duì)勁!

類的注釋怎么沒有了!

想來應(yīng)該是 JDBC 連接 MySQL 的時(shí)候需要添加什么屬性才能獲取表的注釋,上網(wǎng)查詢,發(fā)現(xiàn)是 useInformationSchema,需要將其設(shè)置為 true(看來是 MBG 給自己的 DefaultCommentGenerator 開了小灶):

<?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>

    <!-- 配置數(shù)據(jù)庫(kù)連接 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" userId="root" password="123456">
       <!-- 設(shè)置 useInformationSchema 屬性為 true -->
       <property name="useInformationSchema" value="true" />
    </jdbcConnection>
    
    ...
  </context>
</generatorConfiguration>

然后再次運(yùn)行主類 Generator

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

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

小項(xiàng)目地址:https://github.com/mizhoux/mbg-comment

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot常用注釋的講解

    springboot常用注釋的講解

    今天小編就為大家分享一篇關(guān)于springboot常用注釋的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • JVM執(zhí)行引擎和垃圾回收要點(diǎn)總結(jié)

    JVM執(zhí)行引擎和垃圾回收要點(diǎn)總結(jié)

    不論是在問題現(xiàn)場(chǎng)還是跳槽面試,我們面對(duì)JVM性能問題,依舊會(huì)束手無辭,它需要你對(duì)Java虛擬機(jī)的實(shí)現(xiàn)和優(yōu)化,有極為深刻的理解。所以我在這里整理了一下 JVM的知識(shí)點(diǎn)。今天說說虛擬機(jī)執(zhí)行引擎和垃圾回收,都是十足的干貨,請(qǐng)各位看官耐心批閱!
    2021-06-06
  • Java Swing組件定制RadioButton示例

    Java Swing組件定制RadioButton示例

    這篇文章主要介紹了Java Swing組件定制RadioButton,結(jié)合實(shí)例形式分析了java swing組件RadioButton相關(guān)屬性設(shè)置與操作技巧,需要的朋友可以參考下
    2018-01-01
  • 使用RocketMQTemplate發(fā)送帶tags的消息

    使用RocketMQTemplate發(fā)送帶tags的消息

    這篇文章主要介紹了使用RocketMQTemplate發(fā)送帶tags的消息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java均攤復(fù)雜度和防止復(fù)雜度的震蕩原理分析

    Java均攤復(fù)雜度和防止復(fù)雜度的震蕩原理分析

    這篇文章主要介紹了Java均攤復(fù)雜度和防止復(fù)雜度的震蕩,結(jié)合實(shí)例形式分析了Java均攤復(fù)雜度和防止復(fù)雜度的震蕩相關(guān)概念、原理、實(shí)現(xiàn)方法與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • velocity顯示List與Map的方法詳細(xì)解析

    velocity顯示List與Map的方法詳細(xì)解析

    以下是對(duì)velocity顯示List與Map的方法進(jìn)行了詳細(xì)的介紹。需要的朋友可以過來參考下
    2013-08-08
  • 使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開發(fā)

    使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開發(fā)

    這篇文章主要為大家介紹了使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開發(fā),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐

    spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐

    SpringSecurity主要實(shí)現(xiàn)了認(rèn)證(Authentication)和授權(quán)(AccessControl),本文就來介紹一下spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐,感興趣的可以了解一下
    2025-01-01
  • SpringBoot設(shè)置首頁(yè)(默認(rèn)頁(yè))跳轉(zhuǎn)功能的實(shí)現(xiàn)方案

    SpringBoot設(shè)置首頁(yè)(默認(rèn)頁(yè))跳轉(zhuǎn)功能的實(shí)現(xiàn)方案

    這篇文章主要介紹了SpringBoot設(shè)置首頁(yè)(默認(rèn)頁(yè))跳轉(zhuǎn)功能,本文通過兩種方案,給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java中string和int的互相轉(zhuǎn)換問題

    Java中string和int的互相轉(zhuǎn)換問題

    本文通過實(shí)例代碼給大家詳細(xì)介紹了Java中string和int的互相轉(zhuǎn)換問題,感興趣的朋友一起看看吧
    2017-10-10

最新評(píng)論

泰安市| 邮箱| 壤塘县| 锦屏县| 曲沃县| 田林县| 元氏县| 开封县| 舒兰市| 农安县| 阿城市| 扎鲁特旗| 普兰县| 汾西县| 左云县| 兴和县| 察哈| 土默特右旗| 西畴县| 嵩明县| 曲沃县| 安龙县| 虞城县| 灵川县| 宁远县| 昌乐县| 广丰县| 札达县| 桐城市| 浮山县| 乐昌市| 上思县| 阿克陶县| 都昌县| 扶风县| 仙桃市| 芜湖县| 凤翔县| 朔州市| 桓台县| 湘潭市|