侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 290 篇文章
  • 累计创建 57 个标签
  • 累计收到 98 条评论

MyBatista GeneratorConfig 属性配置大全

Z同学
2020-09-04 / 0 评论 / 1 点赞 / 597 阅读 / 27,943 字
温馨提示:
本文最后更新于 2021-12-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言:

方便之后自己进行标签查询功能。更便捷一些。

全面介绍GeneratorConfig.xml 目录下的各种标签和说明

同时 附上官网说明文档,MyBatis GeneratorXML Configuration File Reference

首先 MyBatis Generator 简称 MBG, 下面将用MBG代表脚本编译工具。

而我们编写的,generatorConfig.xml 文件只是MBG的配置文件。而配置文件主要干三件事情;
1.MBG如何链接到数据库。
2.需要MBG生成什么对象,以及如何生成它们。
3.应该使用数据库之中的哪些表来生成对象。

我们编写完脚本了,需要知道脚本的主要意义是干什么。按照上面三点,我们可以更清晰的明白我们在编写什么东西。

1.<!DOCTYPE>

文件头信息,使用最新版的MBG配置文件必须包含DOCTYPE信息, 同时IDEA 需要下载http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd 文件。

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

2. <generatorConfiguration>标签

所有的内容全部是使用generatorConfiguration进行包裹的,它下面包括了 一共三种子标签。

结构如下所示

<generatorConfiguration>
	<properties>     // 最多只能有一个,可以不设置
	<classPathEnery> //可以有多个,或者不配置
	<context>        //最少要有一个,可以有多个
</generatorConfiguration>

而 <generatorConfiguration> 标签是没有属性值的。

3.<properties> 标签

该标签没有子标签,只有两个属性值,效果如下所示:

<properties resource="" url=""/>

属性介绍:

属性值参数内容描述
resourcecom/myproject/generatorConfig.propertie指定当前项目下的目录结构。是相对路径
urlfile:///C:/myfolder/generatorConfig.properties.可以指定文件系统上的特定位置 ,是绝对路径

这两个参数 只能有一个存在。 要么resource 要么url。
而指向的generatorConfig.propertie 是干什么用的呢?
其实就是针对generatorConfig.xml的补充和拓展,
例如
1.定义数据库之中字段和java类型的对应关系,如果不想采用默认的,就可以自己定义。然后使用该标签进行导入。
2.在外部定义了jdbc url和链接地址,不想重复输入,就可以通过该标签进行引入。

效果:

<generatorConfiguration>
	<!-- 引入配置文件  同一目录下可以直接写文件名称-->
	<properties resource="jdbc.properties"/> 
	<!-- 一个数据库一个context -->
	<context id="MySQLDB">
		<!-- jdbc连接 -->
		<jdbcConnection driverClass="${driverClassName}"
			connectionURL="${url}" userId="${username}"
			password="${password}" />
	</context>
</generatorConfiguration>

jdbc.properties 文件的配置:

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mywebserver?serverTimezone=GMT%2B8
username=root
password=root

文件结构如下
在这里插入图片描述

小贴士: 我们定义的jdbc.properties 可以直接被yml文件引用。输入参数的效果和${key} 的格式写就可以了

4.<classPathEnery>标签

该标签,同样没有子标签,只有一个location 属性
效果展示:

<classPathEntry location="C:\xxxx\mysql-connector-java-8.0.19.jar" />

属性介绍:

属性值参数内容描述
locationC:\xxxx\mysql-connector-java-8.0.19.jar指定当前JDBC的驱动

因为MBG生成xml和java 代码,需要访问数据库,拿到表结构等信息。链接方式也是采用jdbc的链接实现的,所以需要确定驱动加载路径。

到现在为止 文档配置效果:

<?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>
    <properties resource="jdbc.properties"/>
   
    <classPathEntry
location="C:\Users\xs\.m2\repository\mysql\mysql-connector-java\8.0.19\mysql-connector-java-8.0.19.jar"/>

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="${driverClassName}"
                        connectionURL="${DbUrl}" userId="${DbUserName}"
                        password="${DbPassword}">
        </jdbcConnection>
    </context>
</generatorConfiguration>

5.<context> 标签

下面重点介绍该标签,因为我们大部分内容都在该标签下创建。
而同时,<context> 标签 可以同时存在多个不同的。方便大家链接多个数据库,并进行编译生成SQL和实体类。

效果

<context 
	id="DB2Tables"  
	targetRuntime="MyBatis3">
</cntext>
  • id

    • 介绍:必须要填写的值, 参数可以随意填写。因为允许多个context,MBG通过id进行区分不同的context 标签。
    • 参数id="db1"
  • targetRuntime

    • 介绍:指定生成的脚本运行时的环境。
    • 参数targetRuntime=“MyBatis3”
      • MyBatis3DynamicSql: 默认值 MBG将生成与MyBatis版本3.4.2及以上兼容的对象,以及与Java 8及以上兼容的对象(例如,Java model和mapper接口将使用泛型类型和其他Java 8特性,如接口中的默认方法
      • MyBatis3Kotlin:使用该值,MBG将生成与MyBatis版本3.4.2及更高版本兼容的Kotlin对象。
      • MyBatis3:使用该值,MBG将生成与MyBatis 3.0及以上版本和JSE 5.0及以上版本兼容的对象(例如,Java模型和映射器接口将使用泛型类型)。
      • MyBatis3Simple: 使用该值,MBG将生成与MyBatis 3.0及以上版本和JSE 5.0及以上版本兼容的对象(例如,Java模型和映射器接口将使用泛型类型)。使用这个目标运行时生成的映射器是非常基本的CRUD操作,没有“by example”方法,只有很少的动态SQL。
      • MyBatis3DynamicSqlV1 : 这个方法已经进入废弃阶段了建议不要使用。
  • defaultModelType

    • 介绍:用来设置模型生成的类型 如果targetRuntime设置为MyBatis3Simple、MyBatis3DynamicSql、MyBatis3Kotlin 时 该标签无效。
    • 参数defaultModelType=“conditional”
      • conditional:默认值。这个模型和下面的hierarchical类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。
      • flat:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。
      • hierarchical:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。
  • introspectedColumnImpl

    • 介绍:使用此值指定扩展org.mybatis.generator.api.自省列的类的完全限定名。如果您希望在计算列信息时更改代码生成器的行为,可以使用此选项。 更详细的参考官方文档
    • 参数Extending MyBatis Generator

而该标签可以包括大量子标签。效果如下

<context>
	<<property>     // 可以有多个,也可以不设置
	<<plugin>>      // 可以有多个,也可以不设置
	<commentGenerator>        //最多一个 ,可以不设置
	<connectionFactory>  //该标签或者jdbcConnection标签。两者选一 必须有一个存在
	<jdbcConnection>//该标签或者connectionFactory标签。两者选一 必须有一个存在
	<javaTypeResolver> // 最多一个,可以不设置
	<javaModelGenerator>  //必须存在一个
	<sqlMapGenerator>  //最多一个,可以不设置
	<javaClientGenerator> //最多一个,可以不设置
	<table> //最少一个,可以存在多个。
</context>

5.1<property> 标签

该标签是通用标签数据,可以支持自定义拓展时进行传值,而下面主要介绍的是<context>标签模式下支持的属性

参考效果:

<context>
 <property name="autoDelimitKeywords" value="false"/>
 <property name="javaFileEncoding" value="UTF-8"/>
</context>

下面介绍具体支持的name 值和values 值信息;

  • autoDelimitKeywords

    • 介绍:当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加分隔符
    • 参数<property name="autoDelimitKeywords" value="false"/>
      • true: 根据SqlReservedWords中定义的关键字列表; 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖
      • falser: 默认值;
  • beginningDelimiter

    • 介绍:要用作需要分隔符的SQL标识符的起始标识符分隔符的值。如果标识符包含空格,MBG将自动分隔SQL标识符。如果在<table>或<columnOverride>配置中特别请求,MBG还将分隔SQL标识符。
    • 参数<property name="beginningDelimiter" value="""/>
      • ": 默认值;
  • endingDelimiter

    • 介绍:要用作需要分隔符的SQL标识符的结束标识符分隔符的值。如果标识符包含空格,MBG将自动分隔SQL标识符。如果在<table>或<columnOverride>配置中特别请求,MBG还将分隔SQL标识符。
    • 参数<property name="endingDelimiter" value="""/>
      • ": 默认值;
  • javaFileEncoding

    • 介绍:使用此属性指定处理Java文件时使用的编码。新生成的Java文件将以这种编码创建成功。通常情况下,默认不设置时,会读取当前项目的配置编码。
    • 参数<property name="javaFileEncoding" value="UTF-8"/>
      • UTF-8:
      • GBK:
      • GB2312
      • ...
  • javaFormatter

    • 介绍:使用此属性指定用户为生成的Java文件提供的格式化程序的完整类名。类必须实现org.mybatis.generator.api。必须有一个默认(无参数)构造函数。每个上下文都包含Java格式化程序的一个实例。 (ps:如果你不想自定义的话,那么可不添加该属性)
    • 参数<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
      • org.mybatis.generator.api.dom.DefaultJavaFormatter: 系统提供的默认格式类。 可以继承org.mybatis.generator.api后自定义。
      • ...
  • targetJava8

    • 介绍:使用此属性指定生成的代码可以使用Java 8+特性。例如,集合实例化的diamond操作符。
    • 参数<property name="targetJava8" value="true"/>
      • true: 默认值。使用Java8+特性
      • false: 不使用Java8+特性
  • kotlinFileEncoding

    • 介绍:使用此属性指定处理kotlin文件时使用的编码。新生成的kotlin文件将以这种编码创建成功。通常情况下,默认不设置时,会读取当前项目的配置编码。和
    • 参数<property name="kotlinFileEncoding" value="UTF-8"/>
      • UTF-8:
      • GBK:
      • GB2312
      • ...
  • kotlinFormatter

    • 介绍:使用此属性指定用户为生成的Kotlin文件提供的格式化程序的完整类名。类必须实现org.mybatis.generator.api.KotlinFormatter。必须有一个默认的(无参数的)构造函数。每个上下文都包含一个Kotlin格式化程序的实例。 (ps:如果你不想自定义的话,那么可不添加该属性)
    • 参数<property name="kotlinFormatter" value="org.mybatis.generator.api.dom.DefaultKotlinFormatter"/>
      • org.mybatis.generator.api.dom.DefaultKotlinFormatter: 系统提供的默认格式类。 可以继承org.mybatis.generator.api.KotlinFormatter后自定义。
      • ...
  • xmlFormatter

    • 介绍:使用此属性指定用户为生成的XML文件提供的格式化程序的完整类名。类必须实现org.mybatis.generator.api。必须有一个默认(无参数)构造函数。每个上下文都包含XML格式化程序的一个实例。默认的XML格式化程序是org.mybatis.generator.api.dom.DefaultXmlFormatter。默认的格式化程序使用XML DOM类中内置的格式。 (ps:如果你不想自定义的话,那么可不添加该属性)
    • 参数<property name="kotlinFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
      • org.mybatis.generator.api.dom.DefaultXmlFormatter: 系统提供的默认格式类。 可以继承org.mybatis.generator.api.XmlFormatter 后自定义。
      • ...

5.2<plugin>标签

该标签是用来定义插件的,自定义完毕之后的插件,可以通过该标签引入context之中。然后参与到之后的脚本预编译之中。 该标签存在下级子标签。
参考效果:

<context>
  <plugin type="org.mybatis.generator.api.PluginAdapter">
     <property name=”“ value=”“/>  //最多存在一个,可以存在多个 这个根据自定义的PluginAdapter 进行设置了。
   </plugin>
</context>
  • type
    • 介绍:实现插件的类的完全限定名。类必须实现接口org.mybatis.generator.api。必须有一个公共的默认构造函数。请注意,扩展适配器类org.mybatis.generator.api要容易得多。插件适配器比实现整个接口。
    • 参数<plugin type="org.mybatis.generator.api.PluginAdapter">
      • org.mybatis.generator.api.PluginAdapter: 系统提供的默认工具。 可以继承org.mybatis.generator.api.Plugin 后自定义。
      • ...

5.3<commentGenerator>标签

定义注释生成器的规则。定义的注释信息将添加到java属性,java方法,xml元素等。默认情况下,该标签是可以进行拓展的。注释生成默认采用的org.mybatis.generator.internal.DefaultCommentGenerator 规则。
参考例子:

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

该标签存在type 属性值:

  • type
    • 介绍:这可以用来指定用户提供的注释生成器的类型。类必须实现接口org.mybatis.generator.api。必须有一个公共的默认构造函数。该属性还接受特殊值默认值,在这种情况下将使用默认实现(这与不指定类型具有相同的效果)。
    • 参数<commentGenerator type="org.mybatis.generator.internal.DefaultCommentGenerator">
      • org.mybatis.generator.internal.DefaultCommentGenerator: 系统提供的默认注释类。 可以继承org.mybatis.generator.api.CommentGenerator后自定义。
      • ...

下面介绍<property> 的属性值
使用例子如下:

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

下面来介绍name值和values 值。

  • suppressAllComments

    • 介绍:此属性用于指定MBG是否将在生成的代码中包含任何组件。
    • 参数<property name="suppressAllComments" value="true"/>
      • true: 将不会向任何生成的元素添加注释。同时将禁用所有代码合并
      • false: 默认值 。所有生成的elelments将包括指示该元素是生成的元素的注释。
  • suppressDate

    • 介绍:此属性用于指定MBG是否将生成的注释中包含生成时间戳。 请注意,如果suppressAllComments=true时,该标签无意义。
    • 参数<property name="suppressDate" value="true"/>
      • true: 将不会向任何生成的元素添加时间戳。同时将禁用所有代码合并
      • false: 默认值 。所有的注释将包括当前生成时的时间戳
  • addRemarkComments

    • 介绍:此属性用于指定MBG是否在生成的注释中包含来自db表的表和列注释。。 请注意,如果suppressAllComments=true时,该标签无意义。
    • 参数<property name="addRemarkComments" value="true"/>
      • true: 来自db表的表和列注释将被添加到生成的注释中。
      • false: 默认值 。所有生成的注释将不包括在生成元素时来自db表的表和列注释。
  • dateFormat

    • 介绍:将日期写入生成的注释时使用的日期格式字符串。该字符串将用于构造java.text.SimpleDateFormat对象。可以在这里指定该对象的任何有效格式字符串。默认情况下,日期字符串将来自java.util.Date上的toString()方法。请注意,如果suppressAllComments=true时,或者suppressDate=true时 该标签无意义。
    • 参数<property name="dateFormat" value="yyyy-MM-dd"/>
      • yyyy-MM-dd: 可以自由拓展。
      • yyyy-MM-dd HH:mm:ss:
      • ...

5.4<connectionFactory>标签

标签用来定义链接方式,例如需要链接的数据库的地址,密码,账号,驱动等信息。功能和<jdbcConnection>标签是一样的,所以两个标签只能存在一个。
参考效果, 一般使用它的子标签<property> 来处理,而它只有一个type属性。该属性只有在自定义自己的Factory的时候才会有用。我们如果不不自定义的话,可以不用在意

<connectionFactory>
  <property name="driverClass" value="org.hsqldb.jdbcDriver"/>
  <property name="connectionURL" value="jdbc:hsqldb:mem:aname"/>
  <property name="userId" value="sa"/>
</connectionFactory>

下面来介绍property之中的name值和values 值。 总共有四个参数

  • driverClass
    • 介绍:此属性用于指定JDBC驱动程序的完全限定类名。必填项。
    • 参数<property name="driverClass" value="org.hsqldb.jdbcDriver"/>
      • ...根据选定的驱动进行选择
      • org.hsqldb.jdbcDriver:HSQLDB 的驱动
      • com.mysql.cj.jdbc.Driver:MySQL的驱动
      • ...
  • connectionURL
    • 介绍:此属性用于指定数据库的JDBC连接URL。必填项。就是远程jdbc的地址,脚本需要通过该地址,进行访问数据库
    • 参数<property name="connectionURL" value="jdbc:mysql://172.0.0.0:3306/dbName"/>
      • ...根据选定的驱动进行选择
      • jdbc:mysql://172.0.0.0:3306/dbName:MySQL的驱动链接地址
  • password
    • 介绍:链接数据库的账户密码值, 根据数据库限制,所以参数不是必填值
    • 参数<property name="password" value="这个是密码"/>
      • ...根据你的账户自己输入参数值
      • ...
  • userId
    • 介绍:链接数据库的账户ID值, 就是用户名。根据数据库限制,所以参数不是必填值
    • 参数<property name="userId" value="root"/>
      • ...根据你的账户自己输入参数值
      • ...

5.5<jdbcConnection>标签

标签用来定义链接方式,例如需要链接的数据库的地址,密码,账号,驱动等信息。功能和<connectionFactory>标签是一样的,所以两个标签只能存在一个。
参考效果, 一般使用它的属性来处理。相较于<connectionFactory>标签而言,较少使用<property>。而该标签也同时支持<property>。但是官网之中也还没有相关的<property> 的值。
参照例子:

  <jdbcConnection 	
  	driverClass="${driverClassName}" 
	connectionURL="${dburl}"
 	userId="${DbUserName}"
 	password="${DbPassword}"/>

参数介绍:

  • driverClass
    • 介绍:此属性用于指定JDBC驱动程序的完全限定类名。必填项。
    • 参数<jdbcConnection driverClass="${driverClassName}" />
      • ...根据选定的驱动进行选择
      • org.hsqldb.jdbcDriver:HSQLDB 的驱动
      • com.mysql.cj.jdbc.Driver:MySQL的驱动
      • ...
  • connectionURL
    • 介绍:此属性用于指定数据库的JDBC连接URL。必填项。就是远程jdbc的地址,脚本需要通过该地址,进行访问数据库
    • 参数<jdbcConnection connectionURL="jdbc:mysql://172.0.0.0:3306/dbName"/>
      • ...根据选定的驱动进行选择
      • jdbc:mysql://172.0.0.0:3306/dbName:MySQL的驱动链接地址
  • password
    • 介绍:链接数据库的账户密码值, 根据数据库限制,所以参数不是必填值
    • 参数<jdbcConnection password="这个是密码"/>
      • ...根据你的账户自己输入参数值
      • ...
  • userId
    • 介绍:链接数据库的账户ID值, 就是用户名。根据数据库限制,所以参数不是必填值
    • 参数<jdbcConnection userId="root"/>
      • ...根据你的账户自己输入参数值
      • ...

5.6<javaTypeResolver>标签

该标签,是用来定义Jva类型解析器的属性的。顾名思义,就是将数据库之宗的各项存储格式转换为 Long,Integer,Short,String等基础类型。同时也支持转换为你所自定义的数据类型。 如果使用的Kotlin的话,也是在该标签近配置,脚本会自动将java类型转为相应的Kotlin的类型。
而它只有一个type 属性,其他的相关配置都是通过<property>标记进行配置的。
例子:

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

先介绍下,属性值。主要是给你用来自定义的时候使用的,如果你自定义了type转换的规则,那么需要通过type注册进来。

  • type
    • 介绍:这可以用来指定用户提供的Java类型解析器。类必须实现接 org.mybatis.generator.api。必须有一个公共默认构造函数。该属性还接受特殊值默认值,在这种情况下将使用默认实现(这与不指定类型具有相同的效果)。
    • 参数<javaTypeResolver type=" org.mybatis.generator.api">
      • 具体的值,可以根据你自己的定义进行填写你的类路径地址。

下面来介绍property之中的name值和values 值。 总共有两个参数

  • forceBigDecimals

    • 介绍:这个属性控制decimal和numeric类型的字段转为java类型的BigDecimal。默认值false。不进行转换
    • 参数<property name="forceBigDecimals" value="false"/>
      • false:默认值,flase 不强制转为BigDecimal。而是按照精度进行匹配转换;
  • useJSR310Types

    • 介绍:这个属性控制是否强制对日期,时间和时间戳字段使用JSR-310数据类型。而不是使用Java.util.Date.平常使用之中,很少涉及该参数的调整。不用填就可以了。保持默认值

    • 参数<property name="useJSR310Types" value="false"/>

      • false:按照JSR-310的格式进行解析参数了。
        TIME_WITH_TIMEZONE->java.time.OffsetTime
        TIMESTAMP_WITH_TIMEZONE->java.time.OffsetDateTime

      • true: 数据库之中的对应解析关系:

        DATE->java.time.LocalDate
        TIME->java.time.LocalTime
        TIMESTAMP->java.time.LocalDateTime

5.7<javaModelGenerator> 标签

通俗点介绍,该标签是控制数据库表结构转为实体对象的存储路径和实体对象生成时的相关属性的生成规则。 主要有两个属性参数,而多余的其他配置也是通过<property>标签来实现的。
例子:

<javaModelGenerator targetPackage="com.xx.server.entity" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
</javaModelGenerator>

首先介绍下 属性参数的意义。

  • targetPackage

    • 介绍:必填项,设置了生成的实体对象的包。该参数和enableSubPackages有关联操作,请注意。
    • 参数<javaModelGenerator targetPackage="com.xx.server.entity" "/>
      • com.xxx.server.entity:可以参考类的package路径。就是该值
  • targetProject

    • 介绍:必填项,这个设置了文件的存储路径。这个就是实际的项目的目录结构了。
    • 参数<javaModelGenerator targetProject="src/main/java" "/>
      • src/main/java:在IDEA之中的路径,可以参考这种模式进行设置。

下面介绍该标签下的子标签,一共有7种参数可以配置。

  • constructorBased

    • 介绍:用于设置是否为类中每个字段值的类生成构造函数。此外,SQL结果映射将被构建为使用每个字段的构造函数而不是“setter”。 这个字段会关联到<Table>标签之中的 immutable 。 同时在MyBatis3Kotlin 模式下,这个参数设置也没有意义。
    • 参数<property name="constructorBased" value="false"/>
      • false:默认值为false,不会所有属性都生成一个构造方法。
      • true: 会生成。
  • enableSubPackages

    • 介绍:这个参数控制生成的java包,根据数据库表结构和模式的不一样,生成不同的java包。就是在targetPackage属性配置的后面,根据属性,自动添加一个包
    • 参数<property name="enableSubPackages" value="false"/>
      • false:默认值为false,不会进行补
      • true: 会进行补
  • exampleTargetPackage

    • 介绍:此属性用于为生成的示例对象指定不同的包。如果没有指定,示例对象将在与其他模型对象相同的包中生成。
    • 参数<property name="exampleTargetPackage" value="com.xx.server"/>
      • com.xx.server:具体的包值
      • ...
  • exampleTargetProject

    • 介绍:这次参数控制示例对象的java包的存储路径,其实一般是配合exampleTargetPackage一起使用
    • 参数<property name="exampleTargetProject" value="src/java/example"/>
      • src/java/example:具体的文件存储路径
      • ...
  • immutable

    • 介绍:生成的java类中,不会携带属性值得set方法。而这些属性的初始化操作,会全部在构造方法之中体现。
    • 参数<property name="immutable" value="false"/>
      • false:默认值,生成set方法
      • true:不生成set方法,同时在构造方法之中传参属性值,进行初始化。
  • rootClass

    • 介绍:这个就是设置SQL之中的主键对象的基类。设置该值了之后,主键将使用这个限定类进行适配,
      如果MyBatis生成器能够加载根类,那么它将不会覆盖根类中与通常生成的属性完全匹配的属性。属性的精确匹配定义如下
      属性名完全匹配
      属性属于同一类型
      属性有一个“getter”方法
      属性有一个“setter”方法。默认匹配值为null
    • 参数<property name="rootClass" value="com.db.model.EntityBase"/>
      • com.db.model.EntityBase:这个基类 就是自定义了。没有参考值
      • ...
  • trimStrings

    • 介绍:是否验证空值。自动生成的java 代码之中,如果是String类型,那么在set方法之中,将会自动添加上trim判断,检查String是否null值。 一般大家都会加上该参数
    • 参数<property name="trimStrings" value="true"/>
      • false:默认值,不进行验证空值
      • true: 进行验证空值

5.8<sqlMapGenerator> 标签

上面我们定义了脚本生成java 对象的配置,而该标签,就是针对自动生成的xml文件的配置了。
该标签,有两个属性值控制,同时也通过<property>标签信息更多信息的配置,当前版本只有一个<property>标签值。

配置例子:

<sqlMapGenerator targetPackage="mappers"
     targetProject="src/main/resources">
  <property name="enableSubPackages" value="true" />
</sqlMapGenerator>

先介绍属性值:

  • targetPackage

    • 介绍:这个是包名,因为生成的xml文件不是java,所以我们在webServer项目之中一般是存储在resources目录下。而这个属性控制的就是在targetProject 确定的目录下的包结构
    • 参数<sqlMapGenerator targetPackage="mappers"/>
      • mappers:自己任意定义的包名。
      • test.mode: 因为是包名,如果有多级的话,命名方式。
  • targetProject

    • 介绍:这个是文件名,因为生成的xml文件不是java,所以我们在webServer项目之中一般是存储在resources目录下。
    • 参数<sqlMapGenerator targetProject="src/main/resources"/>
      • src/main/resources: 参考在IDEA之中的文件结构,因为resources文件是存储静态不变的问题。我们脚本生成的SQL文件也是固定不变的,所以建议存储路径。

当前该标签下只有一个property的值。

  • enableSubPackages
    • 介绍:是否让schema作为包的后缀
    • 参数<property name="enableSubPackages" value="true" />
      • true
      • false:默认值

5.9<javaClientGenerator> 标签

该标签控制的生成对象 全部是接口对象,这个接口对象就是针对<sqlMapGenerator>标签生成的SQL对象的映射,将所有的SQL方法全部映射成接口方法,这样其他的java对象就能进行调用SQL进行,增删改查操作了。
该标签有三个属性,和三个下级标签配置。
配置例子:

<javaClientGenerator targetPackage="com.server.mapper"
     targetProject="src/main/java" type="XMLMAPPER">
  <property name="enableSubPackages" value="true" />
</javaClientGenerator>

首先介绍下属性参数:

  • targetPackage

    • 介绍:这个是包名,生成的接口对象存储的包结构。而这个属性控制的就是在targetProject 确定的目录下的包结构
    • 参数<javaClientGenerator targetPackage="com.server.mapper"/>
      • com.server.mapper:自己任意定义的包名。
  • targetProject

    • 介绍:这个是文件夹路径,所以我们确定该接口文档的生成存储路径。
    • 参数<javaClientGenerator targetProject="src/main/java"/>
      • src/main/java: 因为该参数为文件路径,所以我们需要“/”来进行拼接逻辑地址。
  • type

    • 介绍:这个属性,控制了整个脚本生成的解析方案,采用什么类型的解析,决定了很多标签属性的意义。也可以自定义扩展,如果要自定义的话,你就需要继承org.mybatis.generator.codegen.AbstractJavaClientGenerator 然后再进行编写你的脚本编译规则了。

      如果是在<context>的 targetRuntime 配置为:MyBatis3DynamicSql 或者MyBatis3Kotlin 。那么下面的配置可以忽略。如果配置的MyBatis3 那么就有下面的几种配置参数了。

    • 参数<javaClientGenerator type="XMLMAPPER"/>

      • XMLMAPPER:生成SQLMap XML文件和独立的Mapper接口。最通用的情况,默认生成sql脚本文档, mapper接口对象,model实体对象。三个文件。
      • ANNOTATEDMAPPER:生成Java Model 和基于注解的Mapper对象。只有实体对象和接口对象,而xml脚本将采用注解的方式,添加在接口对象的方法之中。
      • MIXEDMAPPER:生成基于注解的Java Model 和相应的Mapper对象。只有实体对象和接口对象,而xml脚本将采用注解的模式,添加在实体对象之中。其实就是和ANNOTATEDMAPPER相反而已。

下面介绍下级标签的可选配置项,一共有三个。

  • enableSubPackages

    • 介绍:和sqlMapGenerator标签下的enableSubPackages是一样的逻辑,就是在生成的java接口对象前的路径,是否根据表结构自动补上schema 作为包的后缀。
    • 参数<property name="enableSubPackages" value="false" />
      • true
      • false:默认值
  • rootInterface

    • 介绍:此属性可用于为所有生成的接口对象指定超级接口。 就是rootClass类似的操作,
      但是需要注意。接口的安全性,脚本不会进行判断和检查的。
    • 参数<property name="rootInterface" value="com.test.MyRootInterface" />
      • com.test.MyRootInterface: 这个就是用来指定基类的接口对象,脚本自动生成的接口将会自动继承该接口了。具体自己配置就可以了。
      • ...
  • useLegacyBuilder

    • 介绍: 已经处于废弃状态了。不建议使用。默认不配置即可。
    • 参数<property name="useLegacyBuilder" value="true" />
      • true
      • false:默认值

5.10<table> 标签

前面标签都是针对整体进行配置的。而该标签只针对单个表进行配置。
而我们普通使用的情况下,大部分属性参数都是采用默认配置就可以了。
配置例子:

<table tableName="device_info"
	domainObjectName="DeviceInfo"
     enableCountByExample="false"
     enableUpdateByExample="false"
     enableDeleteByExample="false"
     enableSelectByExample="false"
     selectByExampleQueryId="false">
 </table>

而table标签下支持的子标签包括了:

 <table>
	<property>  //可配可不配,支持多个
	<generatedKey>  //可配可不配,只支持一个
	<domainObjectRenamingRule>   //可配可不配,只支持一个
	<columnRenamingRule> //可配可不配,只支持一个
	<columnOverride> //可配可不配,支持多个
	<ignoreColumn> //可配可不配,支持多个
 </table>

首先介绍<Table>标签的相关属性参数。

  • tableName
    • 介绍: 已经处于废弃状态了。不建议使用。默认不配置即可。这个是Table标签下,必填项,因为根据表名脚本才知道需要将数据库之中的哪个表映射成代码和SQL。
    • 参数<table tableName="device_info" />
      • device_info:数据库之中的表的名称。表名
      • ...

下面的属性是一些可选项了,不配置也不影响运行。

  • schema

    • 介绍: 这个数据库模式,如果数据库默认模式,可以不用写,如果数据库特殊模式可以进行配置。具体模式的配置可以参考PostgreSQL模式*
    • 参数<table schema="MYSCHEMA" />
      • MYSCHEMA:数据库模式。具体模式,根据你的表配置的模式进行
      • ...
  • catalog

    • 介绍: 数据库编目——如果您的数据库不使用编目,或者存在默认的编目,则不需要使用数据库编目。这个其实和schema是一样的,是数据库用来解决命名冲突的。在数据库之中 Catalog包含多个Schema。而一个Schema又包含多个table
    • 参数<table catalog="你的catalog" />
      • 你的catalog: 根据自己的数据库进行配置定义的。 同时请注意,MYSQL 和Oracle 不支持Catalog的。
      • ...
  • alias

    • 介绍: 如果是MyBatis3DynamicSql 和MyBatis3Kotlin 模式,这个属性是不会生效的。这个参数的用意就是在生成的sql 脚本之中,将表的名称和列明进行别名化。其中列明将会是 alias_actualColumnName模式。一般忽略配置,保持默认状态就可以了。
    • 参数<table alias="自定义别名" />
      • 自定义别名
      • ...
  • domainObjectName

    • 介绍: 生成的类的名称,其实就是将表转为实体类的时候,实体类的名称,如果不配置的话,会根据表名自动生成。
    • 参数<table tableName="device_info" domainObjectName="DeviceInfo" />
      • DeviceInfo: 就会将device_info表生成出一个DeviceInfo.class 文件。
        device.DeviceInfo:决定生成的java实体类对象的名称。而实体类的存储路径,在上面的javaModelGenerator 之中已经决定了。但是你也可以再次添加上包名。
  • mapperName

    • 介绍: 这个参数决定生成的接口对象和xml对象的名称。如果不配置的话,接口对象和xml脚本的名称会在domainObjectName 确定的名称后面自动添加上Mapper。
    • 参数<table mapperName="DeviceinfoMapper" />
      • DeviceinfoMapper: 默认不配置 那么就会自动补充,如果配置了,就会按照配置的进行生成。
      • device.DeviceinfoMapper: 如果觉得javaModelGenerator定义的就一级目录,根据不同表创不同的二级目录的话,可以在名称前添加包名。
  • sqlProviderName

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 这个是数据库之中的ProviderName名称,如果不配置的话,会自动在生成的文件名称后面添加SqlProvider
    • 参数<table sqlProviderName="XXXSqlProvider" />
      • XXXSqlProvider: 默认不配置 那么就会自动补充SqlProvider,如果配置了,就会按照配置的进行生成。而一般普通情况下创建的表,不用配置该参数。
      • ...
  • enableInsert

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 控制生成的SQL脚本和接口对象。是否生成insert语句
    • 参数<table enableInsert="false" />
      • false:不生成insert语句 相关的sql和接口。
      • true:默认值 生成。
  • enableSelectByPrimaryKey

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 控制生成的SQL脚本和接口对象。表示是否应该生成select by主键语句。也就是生成通过主键进行查询的接口。 如果表没有主键参数那么不管设置true还是false都不会进行生成该接口和sql语句了。

    • 参数<table enableSelectByPrimaryKey="false" />

      • false:不生成。
      • true:默认值 生成。
  • enableSelectByExample

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 表示是否应该生成select by example语句。其实就是是否允许根据不同值进行查询语句的生成。

    • 参数<table enableSelectByExample="false" />

      • false:不生成。

      • true:默认值 生成。

  • enableUpdateByPrimaryKey

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 表示是否应该生成根据主键进行判断更新的接口和脚本。
    • 参数<table enableUpdateByPrimaryKey="false" />
      • false:不生成。
      • true:默认值 生成。
  • enableDeleteByPrimaryKey

  • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 表示是否应该生成根据主键进行判断删除的接口和脚本。
  • 参数<table enableDeleteByPrimaryKey="false" />
    • false:不生成。
    • true:默认值 生成。
  • enableDeleteByExample

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 表示是否应该生成一个delete by example语句。 并返回删除的数量

    • 参数<table enableDeleteByExample="false" />

      • false:不生成。

      • true:默认值 生成。

  • enableCountByExample

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。 表示是否应该生成一个count by example语句。此语句将返回与示例匹配的表中的行数。 控制返回的指定行数的结果。
    • 参数<table enableCountByExample="false" />
      • true:默认值 生成。
      • false:不生成。
  • enableUpdateByExample

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。表示是否应该生成一个update by example语句。此语句将更新与示例匹配的表中的行。如果为真,还将生成一个示例更新“selective”语句。“选择性”语句将只更新记录参数中相应值为非空的列。
    • 参数<table enableUpdateByExample="false" />
      • false:不生成。
      • true:默认值 生成。
  • selectByPrimaryKeyQueryId

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。该值将以这种形式添加到select by主键语句的select列表中:“'<value>' as QUERYID”。这对于在运行时在DBA跟踪工具中标识查询非常有用。如果使用thus值,则应该为MBG生成的每个不同查询指定一个惟一的id。
    • 参数<table selectByPrimaryKeyQueryId="XXQUERYID" />
      • XXQUERYID:自定义QUERYID 值。
  • selectByExampleQueryId

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。其实和selectByPrimaryKeyQueryId 作用是一样的,只是它会判断全部属性的值,来决定查询条件,而上面那个只会判断主键而已。
    • 参数<table selectByExampleQueryId="XXQUERYID" />
      • XXQUERYID:自定义QUERYID 值
  • modelType

    • 介绍: MyBatis3DynamicSql”或“MyBatis3Kotlin模式下 参数无意义。如果想覆盖表的默认数据类型,那么就可以配置。而某些数据类型,MBG将为特殊数据类型创建新的类。 通常情况下,我们可以不定义
    • 参数<table modelType="conditional" />
      • conditional:此模型类似于分层模型,但如果单独的类只包含一个字段,则不会生成单独的类。因此,如果一个表只有一个主键字段,那么该字段将被合并到基记录类中。
      • flat:此模型仅为任何表生成一个域类。这个类将保存表中的所有字段。
      • hierarchical:如果表有一个主键,这个模型将生成一个主键类,另一个类保存表中任何BLOB列,另一个类保存其余字段。类之间存在适当的继承关系。
  • escapeWildcards

    • 介绍: 表示在搜索列时,架构和表名中的SQL通配符('_'和'%')是否应该转义。如果模式或表名包含一个SQL通配符(例如,如果表名是MY_TABLE,一些驱动程序要求转义下划线字符),则有些驱动程序需要这样做。

    • 参数<table escapeWildcards="false" />

      • false:默认值 。

      • true

  • delimitIdentifiers

    • 介绍: 表示MBG是否应该在搜索表时使用指定的正确大小写,然后在生成的SQL中分隔标识符
      • 参数<table delimitIdentifiers="false" />
        • false:默认值 。
        • true
  • delimitAllColumns

    • 介绍: 表示MBG是否应该将分隔符添加到生成的SQL中的所有列名中。这是为每一列编写<columnOverride>的替代方法,该列指定应该分隔。这对于像PostgreSQL这样对标识符大小写敏感的数据库是很有用的。

    • 参数<table delimitAllColumns="false" />

      • false:默认值 。

      • true

首先介绍在table标签下的property可以配置的选项值。

5.10.1<property>标签

主要是介绍在Table标签下的property,请注意和context下的property不一样。两者参数不共用。

例子:

<table>
	<property name="constructorBased" values="false"/>
<table>

下面具体参数介绍。

  • constructorBased

    • 介绍: 此属性用于选择MyBatis生成器是否为接受类中每个字段值的类生成构造函数。如果在javaModelGenerator 中强制全部不生成set方法的话,那么这个参数不管设置多少,默认也会强制按照true进行处理。 它的优先级相对上面而言较低。

    • 参数<property name="constructorBased" values="false"/>

      • false:默认值 。 不为每个字段都生成构造函数。

      • true:为每个字段都生成构造函数。

  • ignoreQualifiersAtRuntime

    • 介绍: 如果为真,那么MBG将不会将模式或目录添加到生成的SQL中的表名中。如果在多个模式中有同名的表,这是很有用的—可以使用MBG根据一个模式中的表生成对象,但不包括运行时模式。

    • 参数<property name="ignoreQualifiersAtRuntime" values="false"/>

      • false:默认值 。

      • true

  • immutable

    • 介绍:这个属性用于选择MBG是否会生成不可变的模型类——这意味着这些类不会有“setter”方法,而构造函数将接受类中每个字段的值。
      如果为真,则强制使用参数化构造函数来构建模型类,而不考虑“基于构造函数”属性的值。

    • 参数<property name="immutable" values="false"/>

      • false:默认值 。

      • true

  • modelOnly

    • 介绍:此属性用于选择MBG是否仅为表生成模型类。
      如果为真,则不会生成Java客户机。如果配置了<sqlMapGenerator>,并且将此属性设置为true,那么MBG将仅在此表的SQL Mapper XML文件中生成结果映射元素。
      如果为真,则此值将覆盖<table>元素上的任何enable属性—不会生成任何CRUD方法。

    • 参数<property name="modelOnly" values="false"/>

      • false:默认值 。

      • true

  • rootClass

    • 介绍:设置当前类的基类。如果基类中存在的属性参数,则不会进行生成。
    • 参数<property name="rootClass" values="com.xxx.xxx.xx.RootClas"/>
      • com.xxx.xxx.xx.RootClas:根据你自己定义的类来决定
      • ...
  • rootInterface

    • 介绍:设置当前数据库表生成的接口对象的基类。
    • 参数<property name="rootInterface" values="com.xxx.xxx.xx.RootInterface"/>
      • com.xxx.xxx.xx.RootClas:根据你自己定义的类来决定
      • ...
  • runtimeCatalog

    • 介绍:类同上面配置的catalog。作用也是一样。参数值也是一样输入

    • 参数<property name="runtimeCatalog" values="你的catalog"/>

      • myCatalog:根据数据库之中定义的catalog来输入
      • ...
  • runtimeSchema

    • 介绍:类同上面配置的Schema。作用也是一样。参数值也是一样输入
    • 参数<property name="runtimeSchema" values="你的Schema"/>
      • mySchema:根据数据库之中定义的Schema来输入
      • ...
  • runtimeTableName

    • 介绍:类同上面配置的tableName。作用也是一样。参数值也是一样输入。如果配置了该属性,那么上面配置的tableName就将失效,这在Oracle上尤其有用。在这种情况下,您将需要根据同义词所指向的实际表生成对象,然后在此属性中指定同义词名称。您还应该在大多数情况下使用公共同义词指定ignoreQualifiersAtRuntime属性。

    • 参数<property name="runtimeTableName" values="你的table"/>

      • 你的table:根据数据库之中定义的来输入
      • ...
  • selectAllOrderByClause

    • 介绍:此属性可用于指定将添加到selectAll方法的order by子句。这仅适用于使用MyBatis3Simple目标运行时。
    • 参数<property name="selectAllOrderByClause" values="(e.g ID1, ID2 or ID1 desc, ID2 asc)"/>
      • ...
  • trimStrings

    • 介绍:和<javaModelGenerator> 标签之中的trimStrings是一样的,控制String参数是否进行验证null值情况。

    • 参数<property name="trimStrings" values="true"/>

      • true

      • false

  • useActualColumnNames

    • 介绍
    • 参数<property name="useActualColumnNames" values="true"/>
      • true
      • false:默认值
  • useColumnIndexes

    • 介绍
    • 参数<property name="useColumnIndexes" values="true"/>
      • true
      • false:默认值
  • useCompoundPropertyNames

    • 介绍

    • 参数<property name="useColumnIndexes" values="true"/>

      • true
      • false:默认值

关于Table 标签的其他子标签的实现效果,通过官网进行查询吧。可以实现过滤指定数据库中的字段不进行编译等等之类的效果。

下面附上各种标签的链接

<[generatedKey](http://mybatis.org/generator/configreference/generatedKey.html)>
<[domainObjectRenamingRule](http://mybatis.org/generator/configreference/domainObjectRenamingRule.html)> 
<[columnRenamingRule](http://mybatis.org/generator/configreference/columnRenamingRule.html)>
<[columnOverride](http://mybatis.org/generator/configreference/columnOverride.html)>
<[ignoreColumn](http://mybatis.org/generator/configreference/ignoreColumn.html)>

到这里就告一段落了。

1

评论区