MyBatis Generator (MBG) 的参考手册,我帮你们看过咯

MyBatis Generator (MBG) 的参考手册,我帮你们看过咯

MyBatis GeneratorXML Configuration File Reference

对,就是看了下:MyBatis GeneratorXML Configuration File Reference

看这个的原因是最近相帮朋友搞个小的项目管理(非软件项目)小工具,本来计划两周完整,结果没做过后端的我已经搞了1个月了。为了练手,项目没有用低代码框架。于是用Springboot建了个SSM项目,前后端分离,RESTful风格的。
然后网上找了一些MyBatis Generator相关的代码,拷到工程里面,跑是跑通了,但是生成的接口不满意,有不知道怎么去修改,配置文件也不怎么理解。
这是说为什么最近干这个,也间接暴露了水平。其实都是废话。
当你看不太懂别人写的配置文件的时候,可以来看看。
我英文很烂,借助翻译工具看的,加上对mybatis不是很熟,这篇文档他应该很烂的,应该有不少高中低级错误,凑合看。
一直很拒绝写文档,怕有个啥错误,误导别人。写的时候,还要加上“在大部分情况下”这类的话,怕不严谨。这是一种强迫症,影响文档质量。现在不这么想了,写文档是一种沉淀方式。

<!DOCTYPE generatorConfiguration PUBLIC
 "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>

  <!-- context (1..N) 指定生成一组对象的环境 -->
  <!-- 可以针对数据库不同的 schema 或者使用不同的参数,配置多个 context -->
  <!--   id: 此上下文的唯一标识符。该值将在某些错误消息中使用 -->
  <!--   defaultModelType 设置生成的Model类型的默认值。一张表生成几个类。候选值: -->
  <!--     flat: 一张表只生成一个 Model 类。该类将保存表中的所有字段 -->
  <!--     hierarchical: 主键生成一个类(如果有)、BLOB 生成一个类(如果有),其余生成一个类。类之间存在适当的继承关系 -->
  <!--     conditional: 默认值。如果在 hierarchical 下生成的类只有一个字段,则不会生成该类,而是把这个字段放到别的类里面 -->
  <!--   targetRuntime 指定生成代码的运行时目标。候选值: -->
  <!--     MyBatis3DynamicSql: 默认值。生成 Java 的 Model 和 Mapper 接口,而不是 mapper xml 文件 -->
  <!--        注意: 1 defaultModelType 配置不生效,被强制为 flat -->
  <!--              2 只生成带注解的 Mapper 接口,不生成 mapper XML,忽略所有跟xml相关的配置,如:<sqlMapGenerator> -->
  <!--              2 以“每个查询”的方式支持表别名,而不是其他运行时的“全有或全无”方式。因此,配置的表别名将被忽略 -->
  <!--     MyBatis3Kotlin: 和 MyBatis3DynamicSql 一样,只是生成Kotlin语言的类和接口-->
  <!--     MyBatis3: 将生成与 MyBatis 3.0 及更高版本以及 JSE 5.0 及更高版本兼容的对象(例如,Java Model和 Mapper 接口将使用泛型类型) -->
  <!--               这些生成的对象中的“by example”方法支持几乎无限的动态 where 子句 -->
  <!--               此外,使用这些生成器生成的 Java 对象支持许多 JSE 5.0 功能,包括参数化类型和注释 -->
  <!--     MyBatis3Simple: 和MyBatis3类似,但是生成的 mapper 是非常基本的 CRUD 操作和很少的动态 SQL,没有“示例”方法 -->
  <context id="dsql" targetRuntime="MyBatis3DynamicSql" defaultModelType="conditional">
    <!--分隔 SQL 关键字(如果它们用作表中的列名) -->
    <property name="autoDelimitKeywords" value="false"/>
    <!-- 用作需要分隔符的 SQL 标识符的开始和结束标识符分隔符的值, 默认值双引号(&quot;) -->
    <property name="beginningDelimiter" value="&quot;"/>
    <property name="endingDelimiter" value="&quot;"/>
    <!-- 如果没指定,使用平台默认编码 -->
    <property name="javaFileEncoding" value=""/>
    <!-- 为生成的 Java 文件提供的格式化程序的完整类名,-->
    <!-- 必须是实现了org.mybatis.generator.api.JavaFormatter接口的类 --> 
    <!-- 不指定则使用默认值 org.mybatis.generator.api.dom.DefaultJavaFormatter -->
    <property name="javaFormatter" value=""/>
    <!-- 和 javaFileEncoding 类似 -->
    <property name="kotlinFileEncoding" value=""/>
    <!-- 和 javaFormatter 类似,接口:org.mybatis.generator.api.KotlinFormatter,默认值:org.mybatis.generator.api.dom.DefaultKotlinFormatte -->
    <property name="kotlinFormatter" value=""/>
    <!-- 和 javaFormatter 类似,接口:org.mybatis.generator.api.XmlFormatte,默认值:org.mybatis.generator.api.dom.DefaultXmlFormatter -->
    <property name="xmlFormatter" value=""/>
    
    <!-- plugin (0..N) 插件列表 -->
    <!-- 后面专门讲解  -->
    <!-- 参考: (实现插件)http://mybatis.org/generator/reference/pluggingIn.html -->
    <!-- 参考: (提供的插件)http://mybatis.org/generator/reference/plugins.html -->
    <plugin />

    <!-- commentGenerator (0..1) 注释生成器 -->
    <commentGenerator>
      <!-- 阻止生成所有注释,默认值 false,为 true 时,不会向任何生成的元素添加注释 -->
      <!-- 为 true 时,所有代码合并将被禁用 -->
      <property name="suppressAllComments" value="false" />
      <!-- 阻止在注释中生成时间戳, 默认值 false -->
      <property name="suppressDate" value="false" />
      <!-- 把数据库中表、列等的 remark(注释)添加到生成结果中 -->
      <property name="addRemarkComments" value="false" />
      <!-- 日期格式,当 suppressAllComments 或 suppressDate 为 true 的时候,不生成时间,所以该属性无效 -->
      <property name="dateFormat" value="false" />
      <!-- 使用旧版的注解 javax.annotation.Generated -->
      <property name="useLegacyGeneratedAnnotation" value="false" />
    </commentGenerator>

    <!-- jdbcConnection 数据库连接 jdbcConnection/connectionFactory 必须且只能配置一个 -->
    <!-- jdbcConnection (0..1) JDBC 连接 -->
    <!-- driverClass 和 connectionURL 是必须的 -->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/dbname" userId="root" password="123456"/>
    <!-- connectionFactory (0..1) 或者使用连接工厂 -->
    <!-- type 是可选的,值必须是实现了 org.mybatis.generator.api.ConnectionFactory 接口的类,或者 DEFAULT (默认值) -->
    <connectionFactory type="DEFAULT">
      <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
      <property name="connectionURL" value="jdbc:mysql://localhost:3306/dbname"/>
      <property name="userId" value="root"/>
      <property name="password" value="123456"/>
    </connectionFactory>

    <!-- javaTypeResolver (0..1) Java 类型解析器 -->
    <!-- type 是可选的,值必须是实现了 org.mybatis.generator.api.ConnectionFactory 接口的类,或者 DEFAULT (默认值) -->
    <javaTypeResolver type="DEFAULT">
      <!-- 强制使用 java.math.BigDecimal 处理 Decimal和 Numberic -->
      <property name="forceBigDecimals" value="false"/>
      <!-- 强制对 DATE、TIME 和 TIMESTAMP 字段使用 JSR-310 数据类型 -->
      <property name="useJSR310Types" value="false"/>
    </javaTypeResolver>

    <!-- javaModelGenerator (1..1) Model 生成配置 -->
    <!--   targetPackage: Model所在的包, 会根据需要,创建相关的目录(下同) -->
    <!--   targetProject: 代码路径,叫project是兼容Eclipse, 路径必须是已存在的的(下同) -->
    <javaModelGenerator targetPackage="cc.XXX.XXX.model" targetProject="src/main/java">
      <!-- (0..N) 属性列表 -->
      <!-- 使用构造函数,而不是 setter 实例化 Model -->
      <!-- 如果 immutable 为 true,则强制为 constructor based,该属性不生效。MyBatis3Kotlin忽略这个属性 -->
      <property name="constructorBased" value="false"/>
      <!-- 选择 MyBatis Generator 是否根据内省表的 catalog 和 schma,为对象生成不同的Java包 -->
      <property name="enableSubPackages" value="false"/>
      <!-- 以下3个属性会被MyBatis3DynamicSql忽略 -->
      <!-- 为生成的示例对象指定不同的包 -->
      <property name="exampleTargetPackage" value=""/>
      <!-- 为生成的示例对象指定不同的项目 -->
      <property name="exampleTargetProject" value=""/>

      <!-- 以下3个属性会被MyBatis3Kotlin忽略 -->
      <!-- 生成构造函数,接受每个字段,生成实例时使用构造函数,而不是setter -->
      <property name="immutable" value="false"/>
      <!-- 为所有生成的 Java Model 对象指定根类 -->
      <property name="rootClass" value=""/>
      <!-- 选择 MyBatis Generator 是否添加代码来修剪从数据库返回的字符字段中的空格 -->
      <!-- 去除空格会被 <table> or <columnOverride> 的同名属性覆盖 -->
      <property name="trimStrings" value="false"/>
    </javaModelGenerator>

    <!-- sqlMapGenerator (0..1) 用于定义 SQL 映射生成器的属性 --> 
    <!-- 如果 targetRuntime 不生成 mapper XML 文件,不需要配置,否则必须配置 -->
    <!--   targetPackage: mapper 文件所在的包 --> 
    <!--   targetProject: 代码路径,叫project是兼容Eclipse -->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
      <!-- 是否根据内省表的Catalog和Schma为对象, 启用不同的子包 -->
      <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>

    <!-- javaClientGenerator (0..1) 配置生成和 mapper xml 文件对应的接口和类 -->
    <!-- 如果不指定此元素,那么 MyBatis Generator (MBG) 将不会生成 Java 客户端接口和类。-->
    <!--   targetPackage: Mapper 接口文件所在的包 --> 
    <!--   targetProject: 代码路径,叫project是兼容Eclipse -->
    <!--   type: Mapper类型,MyBatis3DynamicSql, MyBatis3Kotlin 忽略该属性 -->
    <!--     ANNOTATEDMAPPER: 生成的对象将是 MyBatis 3.x Mapper基础设施的 Java 接口。这些接口将基于注解和 MyBatis 3.x SqlProviders。不会生成 mapper XML 文件 -->
    <!--     XMLMAPPERXML: 生成的对象将是 MyBatis 3.x Mapper基础设施的 Java 接口。这些接口将依赖于生成的 mapper XML 文件-->
    <!--     MIXEDMAPPER: 仅用于 MyBatis3,简单的使用注解,相当于 ANNOTATEDMAPPER,复杂的(需要 MyBatis 3.x SqlProviders)的使用XML,相当于 MIXEDMAPPER -->
    <javaClientGenerator targetPackage="com.XXX.XXX.mapper" targetProject="src/main/java" type="XMLMAPPERXML">
      <!-- dynamicSqlSupport 包的位置,仅用于 MyBatis3DynamicSql 和 MyBatis3Kotlin -->
      <property name="dynamicSqlSupportPackage" value=""/>
      <!-- 选择 MyBatis Generator 是否根据内省表的Catalog和Schma为对象生成不同的子包。 -->
      <property name="enableSubPackages" value="false"/>
      <!-- 为生成的 Mapper 指定父接口,用户自己确保该接口存在,有效。MyBatis3Kotlin 忽略 -->
      <property name="rootInterface" value="org.mybatis.dynamic.sql.util.mybatis3.CommonSelectMapper"/>
    </javaClientGenerator>

    <!-- table (1..N) 表和实体的生成规则映射 -->
    <!-- 从数据库中选取一个表,根据数据库的内省(introspection)表,生成相应的接口、类、xml文件 -->
    <!--   tableName: Required. 数据库表的名称(不包含 schema 或 catalog) -->
    <!--   schema: 数据库的 schema, 如果数据库不使用 schema,或者有默认值,则不需要 -->
    <!--   catalog: 和 schema 类似 -->
    <!--   alias: 别名,生成的 xml 中 select 将使用这个别名,MyBatis3DynamicSql 和 MyBatis3Kotlin 不生成 xml,所以忽略 -->
    <!--   domainObjectName: domain中的类名,如果不提供。使用tableName的驼峰形式,可以指定子包,如:foo.Bar -->
    <!--   mapperName: Mapper 接口和 xml 文件的名字,如果未指定,则是 domainObjectName + "Mapper" -->
    <!--   以下属性将被 MyBatis3DynamicSql 和 MyBatis3Kotlin 忽略 -->
    <!--   如果没做特别说明,以下属性默认值为true -->
    <!--   sqlProviderName: MyBatis3 生成的 SQL 提供程序类的名称。如果未指定,则是 domainObjectName + "SqlProvider" -->
    <!--   enableInsert: 是否生成插入语句。默认值为ture -->
    <!--   enableSelectByPrimaryKey: 表示是否应生成按主键选择语句,需要有主键才能生效 -->
    <!--   enableUpdateByPrimaryKey: 是否应生成主键更新语句,需要有主键才能生效 -->
    <!--   enableSelectByExample: 表示是否应生成 select by example 语句 -->
    <!--   类似的还有 enableDeleteByExample,enableCountByExample,enableUpdateByExample -->
    <!--   selectByPrimaryKeyQueryId: 该值将以这种形式添加到 select by Primary key 语句的选择列表中:“'<value> ' as QUERYID” -->
    <!--     这对于在运行时识别 DBA 跟踪工具中的查询很有用。如果使用该值,则应该为 MBG 生成的每个不同查询指定一个唯一的 id。-->
    <!--   selectByExampleQueryId: 和上面类似,添加到 select by example 中 -->
    <!--   modelType: 参见 <context> 的 defaultModelType -->
    <!--   以下属性将对 MyBatis3DynamicSql 和 MyBatis3Kotlin 有效 -->
    <!--   以下属性默认值 false -->
    <!--   escapeWildcards: 在搜索列时是否应转义架构和表名中的 SQL 通配符(“_”和“%”),有些驱动要求 -->
    <!--   delimitIdentifiers: 分隔标识符 -->
    <!--   delimitAllColumns: 分隔所有的列 -->
    <table tableName="" domainObjectName="">
      <!-- 覆盖 javaModelGenerator 的属性,MyBatis3Kotlin忽略这个属性 -->
      <property name="constructorBased" value="false"/>
      <!-- 动态SQL支持类的名称,未指定则是 domainObjectName + "DynamicSqlSupport",仅用于 MyBatis3DynamicSQL 或 MyBatis3Kotlin -->
      <property name="dynamicSqlSupportClassName" value=""/>
      <!-- 动态SQL支持类的内部类的名称,未指定则是 domainObjectName -->
      <property name="dynamicSqlTableObjectName" value=""/>
      <!-- 不在表名前面添加 catalog 和 schema -->
      <property name="ignoreQualifiersAtRuntime" value="false"/>
      <!-- 覆盖 javaModelGenerator 的属性,生成的model是不可变的,没有 setter,字段在构造函数里赋值 -->
      <property name="immutable" value="false"/>
      <!-- 不生成 Mapper 接口, 如果配置了 <sqlMapGenerator> ,xml 文件里面只生成 resultMap,不生成CRUD -->
      <property name="modelOnly" value="false"/>
      <!-- 覆盖 <javaModelGenerator> 的设置 -->
      <property name="rootClass" value=""/>
      <!-- 覆盖 <javaClientGenerator> 的设置 -->
      <property name="rootInterface" value=""/>
      <!-- 设置一个运行时的 catalog,不同于生成时的,下面两个类似 -->
      <!-- 如果您想要针对一个 catalo 生成代码,但想要在运行时使用不同的 calalog,这非常有用 -->
      <property name="runtimeCatalog" value=""/>
      <property name="runtimeSchema" value=""/>
      <property name="runtimeTableName" value=""/>
      <!-- 添加 sql select 语句的 orderBy 字句-->
      <property name="selectAllOrderByClause" value=""/>
      <!--  去除空格,没有默认值。如果设置了,就会覆盖 <javaModelGenerator> 和 <table> 的设置 -->
      <property name="trimStrings", value="true"/>
      <!-- 默认情况下,会对列名做驼峰式转化,设为true, 则不会转换 -->
      <property name="useActualColumnNames" value="false"/>
      <!-- 若true,resultMap中使用列索引代替列名 -->
      <property name="useColumnIndexes" value="false"/>
      <!-- 若true,使用列名和列Remark组成复合的名字 -->
      <!-- 这主要用于第四代语言创建的数据库中:列名没有意义,Remark才有意义-->
      <property name="useCompoundPropertyNames" value="false"/>

      <!-- generatedKey (0..1) 指定数据库中自动生成的列,如 identity 或 sequences -->
      <!--   column: 列名 -->
      <!--   sqlStatement: sql 语句的类别,一般使用 JDBC 驱动和实际的数据库解耦,此时用JDBC -->
      <!--   identity: 如果指定了, 那insert语句就不会设置该列的值, -->
      <!--   type: 值为 pre/post 之一,如果指定了值,会被添加到 <selectKey> 元素中,且该元素一直在 insert 语句前面 -->
      <generatedKey column="id" sqlStatement="JDBC" identity="false" type="post"/>
      
      <!-- domainObjectRenamingRule (0..1) -->
      <!-- 可以用来去掉表名中的一些不需要在Model类名字里面出现的字符,或者添加一些字符 -->
      <!-- searchString: 将要被替换掉的字符串, 可使用RE -->
      <!-- replaceString: 新的字符串, 不指定则为空串 -->
      <domainObjectRenamingRule searchString="" replaceString=""/>
      
      <!-- columnRenamingRule (0..1) -->
      <!-- 和 domainObjectRenamingRule 类似,针对列的-->
      <columnRenamingRule/>
      
      <!-- (0..N) columnOverride 对指定的列做转换 -->
      <!--   column: 列名 -->
      <!--   property: 列名映射成java类的属性名。 属于 hardcode, 不理会 useActualColumnNames 的设定 -->
      <!--   javaType: java 类里面的数据类型 -->
      <!--   jdbcType: JDBC的数据类型 -->
      <!--   typeHandler: 类型转换处理器,必须实现了 TypeHandler 接口,如果未指定,则使用默认的 -->
      <!--   delimitedColumnName: 默认false,是否分隔列名,空格会自动分隔,不需要设置 -->
      <!--   isGeneratedAlways: 指定该列是否是数据库中的 GENERATED ALWAYS 列 -->
      <!--      如果是,就不需要再更新和插入中涉及该列 -->
      <!--      注:GENERATED ALWAYS 由其他列计算而得到的列 -->
      <columnOverride column="gender" javaType="com.XXX.yyy.....Gender" typeHandler="">
        <!-- 如果为 true,此属性会将 Java 类型添加到生成的映射中 -->
        <!-- 这通常是没有必要的。然而,某些函数将需要它,例如当您使用 MyBatis 的 EnumOrdinalTypeHandler 时 -->
        <property name="forceJavaTypeIntoMapping", value="false"/>
      <!--  去除空格,没有默认值。如果设置了,就会覆盖 <javaModelGenerator> 和 <table>的设置 -->
        <property name="trimStrings", value="true"/>
      </columnOverride>
      
      <!-- (0..N) ignoreColumn -->
      <!--   column: 列名 -->
      <!--   delimitedColumnName: 匹配列名时是否区分大小写 -->
      <ignoreColumn colum="" delimitedColumnName="false" />
    </table>
  </context>
</generatorConfiguration>

Plugin

下面简单整理下下Plugin
为了适应各种数据裤,和新的各式各样的需求,Mybatis Generator 也在不断升级,越来越庞大,使用插件式自然而然的事情。官方提供了一些插件,我们也可以自己实现插件。

官方提供的 Plugin

官方提供的插件都在org.mybatis.generator.plugins下
这里给个简单的快速预览,具体的用法,参见:http://mybatis.org/generator/reference/plugins.html

插件名说明MyBatis3MyBatis3MyBatis3MyBatis3
DynamicSqlKotlinMyBatis3Simple
CacheNamespacePlugin向生成的 mapper 接口添加 @CacheNamespace 注解
CachePlugin添加了一个生成 SQL 映射的元素
CaseInsensitiveLikePlugin向 Example 类(实际上是 Criteria 内部类)添加方法以支持不区分大小写的 LIKE 搜索
EqualsHashCodePlugin在Model中添加 equals 和 hashCode 方法
FluentBuilderMethodsPlugin在 Mode l中添加快捷builder方法
IgnoreViewsPlugin忽略视图,使用通配符配置表的情况下用
MapperAnnotationPlugin在Mapper接口上添加@Mapper注解
MapperConfigPlugin生成一个框架 MapperConfig.xml 文件,其中包含对 MBG 生成的 mapper XML 文件的引用
RenameExampleClassPlugin通过重命名 MBG 生成的示例类来演示初始化方法的用法。
RowBoundsPlugin添加一个新版的 selectByExample 方法,该方法接受 RowBounds 参数
SerializablePlugin在 Model 中添加 java.io.Serializable 标记接口
ToStringPluginorg在 Model 中添加 toString 方法
UnmergeableXmlMappersPlugin禁用 mapper XML 文件合并, 变为覆盖
VirtualPrimaryKeyPlugin为没有定义主键的表指定一个主键列

自定义 Plugin

参考:http://mybatis.org/generator/reference/pluggingIn.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值