Mybatis Generator代码生成器提高工作效率方法,附带Java对接集成源码

60 篇文章 0 订阅

Mybatis Generator代码生成器

1 说明

Mybatis Generator是Mybatis自动代码生成工具,自动生成实体,mapper接口,xml配置文件。也可以自定扩展, 实现各种需求。

2 创建工程

在这里插入图片描述

通过generatorConfig.xml配置生成规则,GeneratorApplication执行生成代码。

3 使用说明

POM依赖:

<dependencies>

        <!-- Mysql数据库驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.14</version>
        </dependency>

        <!-- 代码生成器 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>

        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.14</version>
                    </dependency>
                    <dependency>
                        <groupId>com.test.trade</groupId>
                        <artifactId>mybatis-generator</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>


generatorConfig.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">

<generatorConfiguration>

  <context id="DB2Tables" >
   <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>

    <!-- 通过type指定自定义的注释 -->
      <commentGenerator type="com.mybatis.generator.custom.CustomCommentGenerator">
      </commentGenerator>

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://192.168.19.150:3306/trade_stock?characterEncoding=UTF-8"
        userId="root"
        password="654321">
    </jdbcConnection>
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>


    <javaModelGenerator targetPackage="com.test.trade.stock.entity" targetProject="mybatis-generator\output">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <sqlMapGenerator targetPackage="com.test.trade.stock.dao"  targetProject="mybatis-generator\output">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.test.trade.stock.dao"  targetProject="mybatis-generator\output">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <table schema="trade_stock" tableName="t_trade_user" enableCountByExample="false"
		enableUpdateByExample="false" enableDeleteByExample="false" 
		enableSelectByExample="false" selectByExampleQueryId="false"  >
      <property name="useActualColumnNames" value="true" />
      <generatedKey column="ID" sqlStatement="MySql" identity="true" />
      <columnOverride column="DATE_FIELD" property="startDate" />
      <ignoreColumn column="FRED" />
      <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />

    </table>

     <table schema="trade_stock" tableName="t_trade_account" enableCountByExample="false"
             enableUpdateByExample="false" enableDeleteByExample="false"
             enableSelectByExample="false" selectByExampleQueryId="false"   >
          <property name="useActualColumnNames" value="true" />
          <generatedKey column="ID" sqlStatement="MySql" identity="true" />
          <columnOverride column="DATE_FIELD" property="startDate" />
          <ignoreColumn column="FRED" />
          <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
      </table>

	
  </context>
</generatorConfiguration>

这里配置生成两张表信息, t_trade_user和t_trade_account, 采用自定义注释生成器, 自动生成的冗余信息过多,在commentGenerator标签中指定生成器路径。

自定义注释生成器CustomCommentGenerator:

public class CustomCommentGenerator extends DefaultCommentGenerator {

    /**
     * 类的头部信息注释生成
     * @param topLevelClass
     * @param introspectedTable
     */
    @Override
    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        topLevelClass.addJavaDocLine("/**");

        String remarks = introspectedTable.getRemarks();
        if (StringUtility.stringHasValue(remarks)) {
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));
            for (String remarkLine : remarkLines) {
                topLevelClass.addJavaDocLine(" * " + remarkLine);
            }
        }
        topLevelClass.addJavaDocLine(" * ");
        StringBuilder sb = new StringBuilder();
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        topLevelClass.addJavaDocLine(sb.toString());
        topLevelClass.addJavaDocLine(" *");
        addJavadocTag(topLevelClass, false);
        topLevelClass.addJavaDocLine(" */");
    }


    /**
     * 生成类的成员变量, 也就是属性的注释
     * @param field
     * @param introspectedTable
     * @param introspectedColumn
     */
    public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
        field.addJavaDocLine("/**");

        String remarks = introspectedColumn.getRemarks();
        if (StringUtility.stringHasValue(remarks)) {
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));
            for (String remarkLine : remarkLines) {
                field.addJavaDocLine(" * " + remarkLine);
            }
        }

        field.addJavaDocLine(" */");
    }

    /**
     * 生成类的成员变量, 也就是属性的注释
     * @param field
     * @param introspectedTable
     */
    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
        field.addJavaDocLine("/**");
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }

    /**
     * 生成属性对应的GETTER方法注释
     * @param method
     * @param introspectedTable
     * @param introspectedColumn
     */
    public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
        method.addJavaDocLine("/**");

        String remarks = introspectedColumn.getRemarks();
        if (StringUtility.stringHasValue(remarks)) {
            String[] remarkLines = remarks.split(System.getProperty("line.separator"));
            for (String remarkLine : remarkLines) {
                method.addJavaDocLine(" * " + remarkLine);
            }
        }

        method.addJavaDocLine(" */");
    }

}

将Class的头部注释, field属性注释和getter方法注释重新按规则生成。

启动类GeneratorApplication

public class GeneratorApplication {

    public static void main(String[] args) {
        try {
            // 注意windows下, 如果targetProject输出目录要加上工程名, targetProject="mybatis-generator\output",通过MAVEN PLUGIN生成不用加工程名
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(GeneratorApplication.class.getClassLoader().getResourceAsStream("generatorConfig.xml"));
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
            if(warnings.size() >0 ) {
                System.out.println("Warnning Msg :");
                for(String warn : warnings) {
                    System.out.println(warn);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

要注意路径问题, windows下可以采用绝对路径, 相对路径是在工程下面, 建议先创建好目录。

执行如果没有抛出异常, 则一般生成成功, 这里把警告信息也打印出来, 便于问题定位。

执行成功后, 会在output目录下生成代码。

4 通过MAVEN插件形式生成

除了上面的生成方式, 还可以通过MAVEN插件来生成:

需要在pom.xml下配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.14</version>
                    </dependency>
                    <dependency>
                        <groupId>com.test.trade</groupId>
                        <artifactId>mybatis-generator</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>


在maven视图窗口, 执行myatis-generator:generate生成代码
在这里插入图片描述

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵然间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值