通过Maven运行 MyBatis Generator

MyBatis Generator (MBG) 包含了一个可以集成到Maven构建的Maven插件,按照Maven的配置惯例, 将MBG集成到Maven很容易. 最简配置如下:

   <project ...>
     ...
     <build>
       ...
       <plugins>
        ...
        <plugin>
      	  <groupId>org.mybatis.generator</groupId>
      	  <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.0</version>
        </plugin>
        ...
      </plugins>
      ...
    </build>
    ...
  </project>

当然,事情永远不会那么容易!

Maven Goal and Execution(Maven 目标和执行)

The MBG Maven plugin 包含一个目标:

  • mybatis-generator:generate

这个目标不会被Maven自动执行,他可以通过以下两种方式执行。

可以在命令行通过以下命令执行:

  • mvn mybatis-generator:generate

您可以通过标准的Maven命令属性传递参数, 例如:

  • mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate

这条命令会使MBG覆盖重名的文件

在一个连续的编译环境中,您可能想让MGB作为Maven构建的一部分自动执行。 这可以通过配置自动执行的目标来实现,这种情况的例子如下:

   <project ...>
     ...
     <build>
       ...
       <plugins>
        ...
        <plugin>
      	  <groupId>org.mybatis.generator</groupId>
      	  <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.0</version>
          <executions>
            <execution>
              <id>Generate MyBatis Artifacts</id>
              <goals>
                <goal>generate</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        ...
      </plugins>
      ...
    </build>
    ...
  </project>

MBG插件将会绑定到Maven构建的 generate-sources 阶段。 所以他会在编译步骤之前执行。 此外注意MBG目标将绑定生成Java和XML资源文件的建立,他们都将包括在生成的JAR包内。

MyBatis Generator 配置属性

所有配置在POM中的属性都可以传递到配置文件,并且可以用通常的方式使用。例如:

   <project ...>
     ...
     <properties>
       <dao.target.dir>src/main/java</dao.target.dir>
     </properties>
     ...
     <build>
       ...
       <plugins>
        ...
        <plugin>
      	  <groupId>org.mybatis.generator</groupId>
      	  <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.0</version>
          <executions>
            <execution>
              <id>Generate MyBatis Artifacts</id>
              <goals>
                <goal>generate</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        ...
      </plugins>
      ...
    </build>
    ...
  </project>

在这种情况下,属性可以在配置文件中被访问的语法是 ${dao.target.dir}.

参考参数

所有的参数都是可选的,大部分都适合的默认值。

参数 表达式 类型 注释
configurationFile ${mybatis.generator.configurationFile} java.io.File 指定配置文件的名称。

默认值:

${basedir}/src/main/resources/generatorConfig.xml
contexts ${mybatis.generator.contexts} java.lang.String 如果指定了该参数,逗号隔开的这些context会被执行。 这些指定的context必须和配置文件中 <context> 元素的 id 属性一致。 只有指定的这些contextid会被激活执行。如果没有指定该参数,所有的context都会被激活执行。
jdbcDriver ${mybatis.generator.jdbcDriver} java.lang.String 如果您指定了 sqlScript 参数, 当连接数据库时这里的值是JDBC驱动类的权限定名称。
jdbcPassword ${mybatis.generator.jdbcPassword} java.lang.String 如果您指定了 sqlScript 参数, 这是连接数据库的密码。
jdbcURL ${mybatis.generator.jdbcURL} java.lang.String 如果您指定了 sqlScript 参数, 这是连接数据库的JDBC URL
jdbcUserId ${mybatis.generator.jdbcUserId} java.lang.String 如果您指定了 sqlScript 参数, 这里是连接数据库的用户id
outputDirectory ${mybatis.generator.outputDirectory} java.io.File 将放置 MBG 所生成文件的目录。 这个目录是用于当 targetProject 在配置文件中设置特殊值的"MAVEN"时使用(大小写敏感)。

默认值:

${project.build.directory}/generated-sources/mybatis-generator
overwrite ${mybatis.generator.overwrite} boolean 如果指定了该参数,如果生成的java文件存在已经同名的文件,新生成的文件会覆盖原有的文件。 如果没有指定该参数,如果存在同名的文件,MBG会给新生成的代码文件生成一个唯一的名字(例如: MyClass.java.1, MyClass.java.2 等等)。 重要: 生成器一定会自动合并或覆盖已经生成的XML文件。

默认值:

false
sqlScript ${mybatis.generator.sqlScript} java.lang.String 要在生成代码之前运行的 SQL 脚本文件的位置。 如果空,不会执行任何脚本。 如果不是空,jdbcDriver, jdbcURL 参数必须提供。 另外如果连接数据库需要认证也需要提供 jdbcUserIdjdbcPassword 参数。

值可以使一个文件系统的绝对路径或者是一个使用"classpath:"开头放在构建的类路径下的路径。

tableNames ${mybatis.generator.tableNames} java.lang.String 如果指定了该参数,逗号隔开的这个表会被运行, 这些表名必须和 <table> 配置中的表面完全一致。只有指定的这些表会被执行。 如果没有指定该参数,所有的表都会被执行。 按如下方式指定表明:

table
schema.table
catalog..table
等等。
verbose ${mybatis.generator.verbose} boolean 如果指定该参数,执行过程会输出到控制台。

targetProject 解释

与Maven运行时 生成器 配置的 targetProject 属性有不同的解释。 如果指定值为"MAVEN" (大小写敏感), targetProject 将被设置为插件的输出目录,而且如果不存在这个目录,将会创建这个目录。 如果没有设置为 "MAVEN", 那么targetProject 将会被 MGB 当成普通的 - 它必须是一个已经存在的目录。