mybatis-generator.xml配置文件编写与标签详解

文章目录

    • 1 MyBatis Generator简介
    • 2 运行MyBatis Generator
      • 2.1 MBG运行方式
      • 2.2 Maven目标与执行
      • 2.3 MBG插件添加依赖
      • 2.4 pom.XML配置参数
    • 3 编写MBG配置文件
      • 3.1 generatorConfiguration元素
      • 3.2 properties元素--可选
      • 3.3 classPathEntry元素--可选
      • 3.4 context 元素

1 MyBatis Generator简介

MyBatis Generator (MBG) 是MyBatis的代码生成器,其内部关联一张或者多张数据库表,生成可访问表的模块。减轻了开发初期数据库表映射对象生成与配置的工作。

MyBatis Generator可以生成:

  1. 生成与表结构匹配的Java POJO。
  2. MyBatis兼容的SQL Map XML文件,并配置简单的CRUD生成SQL。
  3. 可选的Java客户端类,例如符合Spring框架的DAO。
[INFO] Saving file UserDO.java
[INFO] Saving file UserDOMapper.java
[INFO] Saving file UserDOMapper.xml

迭代运行MBG时,需要注意的是:

  1. MBG会自动合并同名的XML文件,但是不会覆盖开发人员对XML的自定义修改。
  2. MBG不会合并Java文件,而是选择覆盖现有文件(此处是要特别注意的点,容易导致代码丢失)。

2 运行MyBatis Generator

2.1 MBG运行方式

运行MBG有多种方式,例如通过命令行、Ant、Maven等。本文主要介绍Maven相关配置。

MBG包含一个Maven插件,可以集成到Maven构建中。

<project ...>
 <build>
   <plugins>
    <plugin>
      <groupId>org.mybatis.generatorgroupId>
      <artifactId>mybatis-generator-maven-pluginartifactId>
      <version>1.3.7version>
    plugin>
  plugins>
build>
project>

当然,事情并非如此简单。

2.2 Maven目标与执行

MBG Maven插件包含一个目标:mybatis-generator:generate,这个目标不是由Maven自动执行,可以通过以下两种方式。
方式1:通过命令行执行目标。

mvn mybatis-generator:generate

方式2:使用标准Maven命令行属性将参数传递给目标。使用该命令,将会运行MBG,覆盖已有的Java文件。

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

如果存在连续的环境构建,你可能想要MBG作为Maven构建的一部分自动执行。我们可以将目标配置为自动执行来实现。例如,

<plugin>
  <groupId>org.mybatis.generatorgroupId>
  <artifactId>mybatis-generator-maven-pluginartifactId>
  <version>1.3.7version>
  <executions>
    <execution>
      <id>Generate MyBatis Artifactsid>
      <goals>
        <goal>generategoal>
      goals>
    execution>
  executions>
plugin>

如上配置,MBG插件绑定到Maven构建的generate-sources阶段,因此它将在编译步骤之前执行。还要注意,MBG会生成Java源文件和XML资源,并将两者放入到构建生成的JAR包中。

2.3 MBG插件添加依赖

当前插件类路径仅包含了MBG自身,如果想要为MBG插件添加JDBC驱动,可以增加dependencies标签。

<plugin> 
  <groupId>org.mybatis.generatorgroupId>  
  <artifactId>mybatis-generator-maven-pluginartifactId>  
  <version>1.3.7version>  
  <executions> 
    <execution> 
      <id>Generate MyBatis Artifactsid>  
      <goals> 
        <goal>generategoal> 
      goals> 
    execution> 
  executions>  
  <dependencies> 
    <dependency> 
      <groupId>mysqlgroupId>  
      <artifactId>mysql-connector-javaartifactId>  
      <version>8.0.16version> 
    dependency> 
  dependencies> 
plugin>

如果所需的依赖已经包含在项目的依赖项中,则可以使用与插件类路径相关的配置参数。
includeCompileDependencies或includeAllDependencies。

2.4 pom.XML配置参数

所有的参数是可选的,并且大多数有默认值。

  1. configurationFile
    表达式:${mybatis.generator.configurationFile}
    类型:java.io.File
    XML配置文件默认存放在${basedir}/src/main/resources/generatorConfig.xml

  2. contexts
    表达式:${mybatis.generator.contexts}
    类型:java.lang.String
    用于当前运行的context列表,以逗号分隔。列表中的任何指定id必须与context标签id属性值直接匹配。列表中指定的id在此次运行中是生效的。如果没有指定该参数,默认所有context生效。

  3. jdbcDriver
    表达式:${mybatis.generator.jdbcDriver}
    类型:java.lang.String
    如果指定sqlScript,则这是数据库要用到的标准JDBC驱动名称。

  4. jdbcPassword
    表达式:${mybatis.generator.jdbcPassword}
    类型:java.lang.String
    如果指定sqlScript,则这是数据库密码。

  5. jdbcURL
    表达式:${mybatis.generator.jdbcURL}
    类型:java.lang.String
    如果指定sqlScript,则这是连接数据库的URL。

  6. jdbcUserId
    表达式:${mybatis.generator.jdbcUserId}
    类型:java.lang.String
    如果指定sqlScript,则这是连接到数据库的用户id。

  7. ouputDirectory
    表达式:${mybatis.generator.outputDirectory}
    类型:java.io.File
    MBG生成文件的存放目录。只要将配置文件中的targetProject设置为特殊值“MAVEN”(区分大小写),就使用此目录。
    默认为${project.build.directory}/generated-sources/mybatis-generator
    注:MBG配置文件中每个Generator后缀的标签都有targetProject属性。

  8. overwrite
    表达式:${mybatis.generator.overwrite}
    类型:boolean
    如果为true,则如果发现现有Java文件的名称与生成的文件的名称相同,则现有Java文件将被覆盖。如果未指定,并且Java文件已经与生成的文件同名,则MBG会将新生成的Java文件以唯一的名称(例如MyClass.java.1,MyClass.java.2)。 重要提示:MBG将始终合并和覆盖XML文件,不会覆盖开发人员自定义的内容。
    默认值:false

  9. sqlScript
    表达式:${mybatis.generator.sqlScript}
    类型:java.lang.String
    生成代码之前要运行的SQL脚本文件的位置。如果为null,则不会运行任何脚本。如果不为null,则还必须提供jdbcDriver, jdbcURL。此外, 如果数据库需要身份验证,则可以提供jdbcUserId和jdbcPassword。
    值可以指定为文件系统中的位置,或者如果前缀为“ classpath:”,则指定为构建类路径上的位置。

  10. tableNames
    表达式:${mybatis.generator.tableNames}
    类型:java.lang.String
    如果指定,则这是在当前运行中使用的以逗号分隔的表列表。列表中指定的任何表必须与

    配置元素中指定的标准表名完全匹配。仅此列表中指定的表将在此运行中处于活动状态。如果未指定此参数,则所有表都将处于活动状态。

  11. verbose
    表达式:${mybatis.generator.verbose}
    类型:boolean
    如果为true,则MBG会将进度消息写入构建日志。

  12. includeCompileDependencies
    表达式:${mybatis.generator.includeCompileDependencies}
    类型:boolean
    如果为true,则范围为“ compile”,“ provided”和“ system”的依赖项将添加到生成器的类路径中。

  13. includeAllDependencies
    表达式:${mybatis.generator.includeAllDependencies}
    类型:boolean
    如果为true,则具有任何作用域的依赖项将添加到生成器的类路径中。

<plugin>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-maven-pluginartifactId>
    <version>1.3.7version>
    
    <dependencies>
        <dependency>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-coreartifactId>
            <version>1.3.6version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.16version>
        dependency>
    dependencies>
    <executions>
        <execution>
            <id>Generate MyBatis Artifactsid>
            <phase>packagephase>
            <goals>
                <goal>generategoal>
            goals>
        execution>
    executions>
    
    <configuration>
        
        <verbose>trueverbose>
        <overwrite>trueoverwrite>
    configuration>
plugin>

3 编写MBG配置文件

MBG是通过XML配置文件来驱动的,我们通过配置文件告诉MBG怎样连接数据库、生成什么样的对象以及怎么生成、哪些表通过MBG生成对象。

如果在POM配置了configurationFile属性,则使用指定文件名;否则文件为generatorConfig.xml。

示例:




<generatorConfiguration>
    <properties resource="generatorConfig.properties">properties>

    <classPathEntry location="${db.driverLocation}"/>

    <context id="MySQLTables" targetRuntime="MyBatis3" defaultModelType="flat">
        
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        commentGenerator>

        
        <jdbcConnection driverClass="${db.driverClassName}"
                        connectionURL="${db.url}"
                        userId="${db.username}"
                        password="${db.password}">
        jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        javaTypeResolver>

        
        <javaModelGenerator targetPackage="com.seckill.dataobject" targetProject="src/main/java">
            
            <property name="constructorBased" value="true"/>
            
            <property name="trimStrings" value="true"/>
        javaModelGenerator>

        
        <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">sqlMapGenerator>

        
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.seckill.dao" targetProject="src/main/java">
        javaClientGenerator>

        
        <table tableName="seckill_user" domainObjectName="UserDO" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">table>
        <table tableName="seckill_password" domainObjectName="UserPasswordDO" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">table>
    context>
generatorConfiguration>

generatorConfig.properties

db.driverLocation=/home/ac/.m2/repository/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306
db.username=root
db.password=123456

3.1 generatorConfiguration元素

MBG配置文件的根元素。文件包含以下文档声明:


子元素可以是properties(0-1)、classPathEntry(0-N)、context(1-N)。

3.2 properties元素–可选

将属性配置到外部文件中,通过properties标签引入。

<properties resource="generatorConfig.properties">properties>

3.3 classPathEntry元素–可选

添加类路径到MBG运行的类路径中。当载入JDBC驱动,或者当载入JavaModelGenerator根类校验重写方法时,MBG从这些位置载入类。如果JDBC驱动已经在classpath下,不再需要引入该驱动jar包。

<classPathEntry location="${db.driverLocation}"/>

3.4 context 元素

指定生成一组对象的环境,例如指定数据库、生成对象和XML位置等。后面的元素都是context的子元素。

<context id="MySQLTables" targetRuntime="MyBatis3" defaultModelType="flat">
...
context>

其中,
defaultModelType属性表示MBG如何生成实体类,flat表示为每张表只生成一个实体类。
targetRuntime用于指定生成代码的运行时环境,默认值为MyBatis3。

(0个或多个)
通常与父元素一起使用。例如,

<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/> 

(0个或多个)
(0个或1个)
用于控制注释。

<commentGenerator>
    <property name="suppressDate" value="true"/>
    <property name="suppressAllComments" value="true"/>
commentGenerator>

(1个)
用于指定数据库连接信息,有且只能有一个。下面4个属性中驱动和URL必选,用户名和密码可选。


<jdbcConnection driverClass="${db.driverClassName}"
                connectionURL="${db.url}"
                userId="${db.username}"
                password="${db.password}">
jdbcConnection>

(0个或1个)
用来指定JDBC类型和Java类型如何转换。

<javaTypeResolver>
    <property name="forceBigDecimals" value="false"/>
javaTypeResolver>

forceBigDecimals是可配置属性,可以强制DECIMAL和NUMERIC类型转换为Java的BigDecimal类型,默认为false,一般不需要配置。

(1个)
用于控制生成的实体类。


<javaModelGenerator targetPackage="com.seckill.dataobject" targetProject="src/main/java">
    
    <property name="enableSubPackages" value="false"/>
    
    <property name="trimStrings" value="true"/>
    
    <property name="immutable" value="false"/>
    
    <property name="constructorBased" value="true"/>
javaModelGenerator>

还有一个属性是rootClass,用于设置所有实体类的基类。

(0个或1个)


<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
    <property name="enableSubPackages" value="false"/>
sqlMapGenerator>

(0个或1个)


<javaClientGenerator type="XMLMAPPER" targetPackage="com.seckill.dao" targetProject="src/main/java">
    <property name="enableSubPackages" value="false"/>
javaClientGenerator>

(1个或多个)
配置表与POJO类的映射,只有配置的表才能生成实体类和其他文件。


<table tableName="seckill_user" domainObjectName="UserDO" enableCountByExample="false"
   enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
   selectByExampleQueryId="false">table>

table的属性有很多,下面简单介绍其中几个。
generatedKey 属性:指定自动生成主键。
columnRenamingRule 属性:生成列前,对列重命名。
columnOverride 属性:修改数据库列的某些属性。

columnOverride column="detail" jdbcType="VARCHAR"/>

ignoreColumn属性:屏蔽不需要生成的列。

参考文档

  1. http://mybatis.org/generator/index.html
  2. https://blog.csdn.net/u014365133/article/details/78884751

你可能感兴趣的:(MyBatis)