zoukankan      html  css  js  c++  java
  • MyBatis Generator 自定义生成注释

    注释生成器

    为了生成db里面的注释,必须自定义注释生成器

    EmptyCommentGenerator:

    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.*;
    import org.mybatis.generator.api.dom.xml.XmlElement;
    
    import java.util.Properties;
    import java.util.Set;
    
    public class EmptyCommentGenerator implements CommentGenerator {
    
    	@Override
    	public void addConfigurationProperties(Properties properties) {
    
    	}
    
    	@Override
    	public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
    
    	}
    
    	@Override
    	public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
    
    	}
    
    	@Override
    	public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
    
    	}
    
    	@Override
    	public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
    
    	}
    
    	@Override
    	public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean b) {
    
    	}
    
    	@Override
    	public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
    
    	}
    
    	@Override
    	public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
    
    	}
    
    	@Override
    	public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
    
    	}
    
    	@Override
    	public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
    
    	}
    
    	@Override
    	public void addJavaFileComment(CompilationUnit compilationUnit) {
    
    	}
    
    	@Override
    	public void addComment(XmlElement xmlElement) {
    
    	}
    
    	@Override
    	public void addRootComment(XmlElement xmlElement) {
    
    	}
    
    	@Override
    	public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) {
    
    	}
    
    	@Override
    	public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> set) {
    
    	}
    
    	@Override
    	public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) {
    
    	}
    
    	@Override
    	public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> set) {
    
    	}
    
    	@Override
    	public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) {
    
    	}
    }
    

    MySQLCommentGenerator:

    import java.util.Properties;
    import org.mybatis.generator.api.IntrospectedColumn;
    import org.mybatis.generator.api.IntrospectedTable;
    import org.mybatis.generator.api.dom.java.Field;
    import org.mybatis.generator.api.dom.java.TopLevelClass;
    
    /**
     * Created by qhong on 2019/3/22 14:10
     **/
    public class MySQLCommentGenerator extends EmptyCommentGenerator {
    
       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 remarks = introspectedTable.getRemarks();
    
          topLevelClass.addJavaDocLine("/**");
          topLevelClass.addJavaDocLine(" * " + remarks);
          topLevelClass.addJavaDocLine(" */");
       }
    
       @Override
       public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
          // 获取列注释
          String remarks = introspectedColumn.getRemarks();
          field.addJavaDocLine("/**");
          field.addJavaDocLine(" * " + remarks);
          field.addJavaDocLine(" */");
       }
    }
    

    代码生成配置

    mybatis-generator.xml

    <?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">
    <!-- 第一种mybatis逆向生成xml配置 -->
    <generatorConfiguration>
    
      <context id="sqlserverTables" defaultModelType="flat"  targetRuntime="MyBatis3">
        <!-- 生成的 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"/>
    
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- 生成的pojo,将implements Serializable-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
    
        <!-- 自定义注释生成器 -->
        <commentGenerator type="com.jsy.order.config.mybatis.MySQLCommentGenerator">
        </commentGenerator>
    
        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
          connectionURL="jdbc:mysql://18.16.200.42:3306/personnel-dev"
          userId="root"
          password="shitou$root">
          <!-- 设置 useInformationSchema 属性为 true -->
          <property name="useInformationSchema" value="true" />
        </jdbcConnection>
    
        <!--
        默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
            true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
        -->
        <javaTypeResolver>
          <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
    
        <!--
        生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,
        也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下
        -->
        <!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">-->
        <javaModelGenerator targetPackage="com.jsy.order.mybatis.entity" targetProject="./src/main/java">
          <property name="enableSubPackages" value="true"/>
          <!-- 从数据库返回的值被清理前后的空格  -->
          <property name="trimStrings" value="true"/>
        </javaModelGenerator>
    
        <!--对应的mapper.xml文件  -->
        <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
          <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
    
        <!-- 对应的Mapper接口类文件 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.jsy.order.mybatis.dao" targetProject="./src/main/java">
          <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
    
    
        <!--生成对应表及类名-->
        <!--<table tableName="stocktradeinfo" domainObjectName="StockTradeInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
        <table tableName="tb_order" domainObjectName="Order" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    
        <table tableName="tb_resident_customer_info" domainObjectName="ResidentCustomerInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    
    
      </context>
    </generatorConfiguration>
    

    注意其中的commentGenerator节点,引用的是自定义的类

    上面的网上都有,但是网上一般都是自己写main方法调用

    我这边不想写main方法,还是用maven插件命令进行调用

    pom.xml插件配置:

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.7</version>
                    <dependencies>
                        <dependency>
                            <groupId> mysql</groupId>
                            <artifactId> mysql-connector-java</artifactId>
                            <version> 5.1.39</version>
                        </dependency>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.7</version>
                        </dependency>
                        <dependency>
                            <groupId>com.jsy</groupId>
                            <artifactId>order-persistence</artifactId>
                            <version>1.0.0-SNAPSHOT</version>
                        </dependency>
                    </dependencies>
    
                    <executions>
                        <execution>
                            <id>Generate MyBatis Artifacts</id>
                            <!--<phase>package</phase>-->
                            <!--<goals>-->
                                <!--<goal>generate</goal>-->
                            <!--</goals>-->
                        </execution>
                    </executions>
                    <configuration>
                        <!--允许移动生成的文件 -->
                        <verbose>true</verbose>
                        <!-- 是否覆盖 -->
                        <overwrite>true</overwrite>
                        <!-- 自动生成的配置 -->
                        <configurationFile>
                            src/main/resources/mybatis-generator.xml</configurationFile>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    

    goal:

    其中goals注释,是因为mybatis-generator.xml中,如果没有table标签,那么package就会报错

    [ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate (Generate MyBatis Artifacts) on project order-persistence: XML Parser Error on line 70: 元素类型为 "context" 的内
    容不完整, 它必须匹配 "(property*,plugin*,commentGenerator?,(connectionFactory|jdbcConnection),javaTypeReso
    lver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table+)"。 -> [Help 1]
    

    插件配置的引用

    注意插件配置中的引用依赖

    <dependency>
                        <groupId>com.jsy</groupId>
                        <artifactId>order-persistence</artifactId>
                        <version>1.0.0-SNAPSHOT</version>
                    </dependency>
    

    这是我项目中的一个模块,就是上面自定义注释生成器所在项目的模块,而且这个模块还要引用

       <!-- MyBatis Generator -->
        <dependency>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-core</artifactId>
          <version>1.3.7</version>
        </dependency>
    

    mybatis-generator 的plugin有自己的classpath,我们在项目中直接继承的类和plugin不属于同一个classpath

    这其实是不同的两个维度。

    命令生成代码

    全都配置好以后,还需要将注释生成器所在模块使用maven命令install到本地,

    这样就可以使用下面命令生成代码

    mvn mybatis-generator:generate
    

    如果本地并没有注释生成器所在模块,那么就会报异常:

    [ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate (default-cli) on project order-persistence: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate failed: Cannot instantiate object of type com.jsy.order.config.mybatis.MySQLCommentGenerator -> [Help 1]
    

    参考

    MyBatis Generator 自定义生成注释

    mybatis-generator自定义注释生成

    mybatis插件--(1)--mybatis generator自定义插件或者扩展报Cannot instantiate object of type XXX

  • 相关阅读:
    leetcode算法题(JavaScript实现)
    使用git submodule管理一个需要多个分立开发或者第三方repo的项目
    linux下从源代码安装git
    git项目实战常用workflow和命令
    如何在linux console中显示当前你在的branch?
    git plumbing 更加底层命令解析-深入理解GIT
    如何直接在github网站上更新你fork的repo?
    git remotes
    git和其他版本控制系统的区别
    Git server安装和配置
  • 原文地址:https://www.cnblogs.com/hongdada/p/10580005.html
Copyright © 2011-2022 走看看