mybatis插件之generator

<sqlMapGenerator> 元素

<sqlMapGenerator> element 用于定义SQL映射生成器的属性。
SQL映射生成器为每一个内省的表生成MyBatis/iBATIS形式的XML文件。

如果目标是iBATIS2,那么这个元素是<context> 元素的一个必须的子元素。

如果目标是MyBatis3,那么只有当您选择javaClientGenerator需要XML时,他才是<context> 元素的一个必须的子元素。

如果不指定一个javaClientGenerator,则适用以下规则:

  • 如果您指定一个sqlMapGenerator,那么MBG将只生成SQL映射的XML文件和模型对象。
  • 如果您没有指定一个sqlMapGenerator,那么MBG将只会生成模型对象。

必选属性

属性 描述
targetPackage 这个包用于放置生成的SQL映射文件。
       在默认的生成器中,属性"enableSubPackages"用来控制如何计算实际的包。
       如果是true,如果表的catalog和schema存在,就将他们作为子包加起来。
       如果"enableSubPackages"是false(默认值),计算的package将是targetPackage属性指定的值。
       MBG 将创建所需的生成包的文件夹。
targetProject 这用来指定生成SQL映射的目标项目。
       当在Eclipse环境中运行时,此选项指定保存对象的位置的项目和源文件夹。
       在其他环境中,此值应为本地文件系统上的现有目录。
       如果它不存在,MBG不会创建它。

支持的属性

下面的表格列出了所有可用的 <property> 子元素:

属性名 属性值
enableSubPackages 这个属性用来选择MGB是否根据基于目录和内省表来生成不同的Java包。

例如,假设某个表MYTABLE在MYSCHMA的schema中,也假设targetPackage属性的值设置为"com.mycompany"。
       如果此属性为true,为这个表生成的DAO接口和类将被放置在包"com.mycompany.myschema"中。
       如果此属性是false,生成的SQL映射将被放在"com.mycompany" schema中。

默认值是 false

<table> 元素

<table> 元素用来从内省数据库中选择一个表。选定的表会生成如下的这些对象:

  • 一个 MyBatis/iBATIS 格式的SQL映射文件
  • 一组根据表生成的"model"类:
    • 一个和表的主键匹配的类(如果表有主键)。
    • 一个包含了非主键字段和BLOB字段的类,如果存在主键类,这个类就会继承主键类。
    • 如果表中包含BLOB字段,就会有一个包含了BLOB字段的类。这个类会根据表的配置继承上面的一个或两个类。
    • 一个用于不同的"by example"方法(selectByExample, deleteByExample)生成动态查询条件的类。
  • (可选) 一个DAO接口或者类

这个元素是<context>元素的一个至少存在一个的必选子元素。
您可以指定不限制数量的table元素。

数据库标识符

MyBatis Generator (MBG) 试图自动处理数据库标识符的大小写敏感性。
在大多数情况下,无论您是否设置catalog, schematableName 属性,MBG都能找到表。
MBG的处理过程遵循以下步骤:

  1. 如果 catalog, schema 或      tableName 属性包含空格,MBG将会根据指定的精确的情况查找。
         在这种(包含空格)情况下,MBG将会自动分割生成SQL中表的标识符。
  2. 如果数据库记录是以大写形式存储的标识符,MGB会自动将任何表的标识符转换为大写。
  3. 如果数据库记录是以小写形式存储的标识符,MGB会自动将任何表的标识符转换为小写。
  4. 其他情况,MBG根据指定的精确的情况查找。

在大多数情况下,这种处理很完美。然而,在某些情况下它会失败。
例如,假设您创建了这样的一个表:

  create table "myTable" (
     ...some columns
  )

因为表名可以用分隔符,即使数据库把标识符存储为大写,大部分的数据库会根据精确指定的表名来生成表。
在(上面)这种情况下,您需要在表的配置中指定delimitIdentifiers="true"

必选属性

属性 描述
tableName 数据库表的名称(不包括schema或catalog)。如果需要,指定的值可以包含SQL通配符。

可选属性

属性 描述
schema 数据库 schema - 如果您的数据库不使用 schema ,或者有一个默认的 schema 您不需要设置 schema。
     如果需要,指定的值可以包含SQL通配符。
catalog 数据库 catalog - 如果您的数据库不使用 catalog,或者有一个默认的 catalog,您就不需要设置 catalog。
alias 如果指定,这个值会用在生成的select查询SQL的表的别名和列名上。
       列名会被别名为 alias_actualColumnName(别名_实际列名) 这种模式。
domainObjectName 生成对象的基本名称。如果没有指定,MBG会自动根据表名来生成名称。
   这个(指定或者自动生成的)名字将用于计算实体类的名称和DAO类的名称。

您可以在实体对象的名字上指定包名分割。
例如,您可以指定foo.Bar,然后实体对象的名字会是 Bar,包名foo会添加到生成器配置中指定的目标包后面。

enableInsert 指定是否生成Insert语句。

默认值是 true

enableSelectByPrimaryKey 指定是否生成通过主键查询的语句。
   无论这个怎么设置,当表不存在主键的时候,不会生成这个语句。

默认值是 true

enableSelectByExample 指定是否生成通过Example查询的语句。
   这个语句支持运行时生成多种不同条件的动态查询。

默认值是 true

enableUpdateByPrimaryKey 指定是否生成通过主键更新的语句。
   无论这个怎么设置,当表不存在主键的时候,不会生成这个语句。

默认值是 true

enableDeleteByPrimaryKey 指定是否生成通过主键删除的语句。
       无论这个怎么设置,当表不存在主键的时候,不会生成这个语句。

默认值是 true

enableDeleteByExample 指定是否生成通过Example删除的语句。
   这个语句支持运行时生成多种不同的条件动态删除。

默认值是 true

enableCountByExample 指定是否生成通过Example查询总数的语句。
   这个语句将返回满足Example条件的数据总数。

默认值是 true

enableUpdateByExample 指定是否生成通过Example更新的语句。
   这个语句将更新满足Example条件的数据。
如果设置为True,UpdateByExampleSelective语句也会生成。
这个语句只会更新那些参数中值不为null的的列。

默认值是 true

selectByPrimaryKeyQueryId 这个值会以"‘<value>‘ as QUERYID"这种形式被添加到通过主键查询的语句的select列中。
   这可能对在运行时的DBA跟踪工具中标记查询有用。
如果您使用这个值,您需要为MBG生成的每一个查询指定一个唯一的id。
selectByExampleQueryId 这个值会以"‘<value>‘ as QUERYID"这种形式被添加到通过Example查询的语句的select列中。
   这可能对在运行时的DBA跟踪工具中标记查询有用。
如果您使用这个值,您需要为MBG生成的每一个查询指定一个唯一的id。
modelType 如果您需要,这个值可以用来重写默认的模型类型。
 如果没有指定,MBG将会生成基于上下文默认模型类型的实体对象。
 模型类型定义了MBG如何生成实体类。
 有一些模型类型MGB会为每个表生成一个单独的实体类。
 另外一些模型,MGB会根据表结构生成不同的一些类。
 这个属性有以下可选值:

conditional 这个模型和hierarchical类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。
           因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。
flat 该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。
hierarchical 如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段,
           则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。
           MBG会在所有生成的实体类之间维护一个继承关系(注:BLOB类 继承 其他字段类 继承 主键类)。
escapeWildcards 这个属性表示当查询列,是否对schema和表名中的SQL通配符 (‘_‘ and ‘%‘) 进行转义。
   对于某些驱动当schema或表名中包含SQL通配符时(例如,一个表名是MY_TABLE,有一些驱动需要将下划线进行转义)是必须的。

默认值是 false.

delimitIdentifiers 这个属性表示当查询表并且在生成的SQL中分隔标识符时,是否使用指定的确切的值。
有关更多详细信息,请参见上面的详述。

分隔符在        <context> 元素上指定。

默认值是 false。除非 catalog,        schematableName 属性值包含空白时,是 true.

delimitAllColumns 指示是否给生成SQL中所有的列名添加分隔符。
这是一种给每个列添加<columnOverride>来指定列需要被分隔的替代方式。
这对类似PostgreSQL这种使用小写标识符的数据库很有用。

分隔符在        <context> 元素上指定。

默认值是 false.

子元素

支持的属性

下面的表格列出了所有可用的 <property> 子元素:

属性名 属性值
constructorBased 此属性用于选择代码生成器是否生成接受类中的每个字段的值的类的构造函数。
 此外,SQL结果映射也会为每个字段生成使用构造方法而不是"setter"的方式。

此属性仅适用于MyBatis3,iBATIS2将会被忽略。

如果"immutable"属性设置为"true",这个属性将会被忽略。

默认值是 false

ignoreQualifiersAtRuntime 如果设置为true,MBG不会讲schema或catalog添加到生成SQL中的表名上。
如果您有几个schemas中的表具有相同的名称,这是非常有用的。
您可以使用MBG生成基于在一个schema上的表,但是运行时不包含schema。

默认值是 false

immutable 此属性用于选择MBG是否会生成不可变的模型类。
 这意味着这些类不会包含"setter"方法,而且通过构造参数接收类中所有字段的值。

如果设置为true,将会忽略"constructorBased"属性,
 强制生成通过参数化构造方法的模型类。

此属性仅适用于MyBatis3,iBATIS2将会被忽略。

默认值是 false

modelOnly 此属性用于选择MBG是否只会为表生成模型类。

如果设置为true,那么就不会生成Java客户端类。
 如果 <sqlMapGenerator> 配置了,并且属性设置为true,那么MGB将会在该表的SQL映射XML中只生成结果映射元素。

如果设置为true,这个值会覆盖<table>元素上所有的"enable*"属性,将不会生成任何CRUD方法。

默认值是 false

rootClass 这个属性可以用来指定所有生成的Java模型类的基类。
 如果表包含主键,MBG会将该值指定为主键对象的超类。
 或者其他记录对象的超类。
 这个值将会覆盖Java模型生成配置中配置的rootClass
     

重要: 如果MBG可以加载基类,通常生成的属性不会覆盖和基类中完全匹配的属性。
      完全匹配属性的定义如下

  • 属性名称完全相同
  • 属性的类型相同
  • 属性有一个"getter"方法
  • 属性有一个"setter"方法

如果指定这个值,这个属性值应该是一个完全限定的类名(例如:com.mycompany.MyRootClass).

rootInterface 这个属性可以用来指定所有生成的DAO接口对象的父接口。
 这个属性值会覆盖DAO生成器配置中配置的rootInterface属性。

重要: MBG 不会校验接口是否存在或者合法。

如果指定这个值,这个属性值应该是一个完全限定的接口名 (例如:com.mycompany.MyRootInterface).

runtimeCatalog 如果您指定了这个属性值,MBG会在生成的SQL中使用这个catalog,而不是前面配置的catalog 属性值。
       当您生成代码的catalog和运行时的catalog不一样时,这会非常有用。
runtimeSchema 如果您指定了这个属性值,MBG会在生成的SQL中使用这个schema,而不是前面配置的schema 属性值。
   当您生成代码的schema和运行时的schema不一样时,这会非常有用。
runtimeTableName 如果您指定了这个属性值,MBG会在生成的SQL中使用这个表名,而不是前面配置的tableName 属性值。
   当您想在Oracle中使用公共同义词生成对象时,这会非常有用。
在这种情况下,您将需要生成对象的同义词的指向您实际表。那就在此属性中指定同义词名称。
在使用公共同义词的大多数情况下,您还需要设置 ignoreQualifiersAtRuntime属性。
selectAllOrderByClause 这个属性可以用于指定将会加到 selectAll 方法中的order by语句。
这仅适用于您使用MyBatis3Simple目标运行环境时。
MBG会将您在这儿指定的任何属性值前面追加order by
因此该属性赢仅包含列表中的列(例如 ID1, ID2ID1 desc, ID2 asc)
useActualColumnNames 如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。
       如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式。
       在这两种情况下,可以通过 <columnOverride>  元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性。

例如,假设一个表包含START_DATE列,如果这个属性是"true",
       那么MBG生成的属性名是START_DATE - 这意味着这个值的getter和setter方法将会是        getSTART_DATE()setSTART_DATE().
       如果这个属性值是fasle,MBG将会生成的属性名是 startDate - 这意味着这个值的getter和setter方法将会是 getStartDate() 和        setStartDate().

默认值是 false

useColumnIndexes 如果是true,MBG生成resultMaps的时候会使用列的索引,而不是结果中列名的顺序.
       当表中的列名的区别只是大小写的时候,这会非常有用.
       这个支持还会有一个轻微的性能优势.

默认值是 false

重要提示: 当目标运行环境是Mybatis版本3时不支持这个属性.

useCompoundPropertyNames 如果是true,那么MBG生成属性名的时候会将列名和列备注接起来.
       这对于那些通过第四代语言自动生成列(例如:FLD22237),但是备注包含有用信息(例如:"customer id")的数据库来说很有用.
       在这种情况下,MBG会生成属性名FLD2237_CustomerId.

默认值是 false

示例

这个元素指定我们总是想为一个在MYSCHEMA schema上的叫做 MYTABLE 的表生成代码.
我们还想忽略表中一个叫"fred"的列,而且我想还想重写"BEG_DATA"列,以便生成的属性名是"startDate".

<table tableName="MYTABLE" schema="MYSCHEMA">
  <ignoreColumn column="fred"/>
  <columnOverride column="BEG_DATE" property="startDate"/>
</table>

时间: 2024-07-28 16:34:52

mybatis插件之generator的相关文章

MyBatis插件及示例----打印每条SQL语句及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResultS

MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)

在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Java反射技术 在Java中反射技术已经大行其道,通过不断的优化性能得到了巨大的提高,而反射技术使得Java的可配置性大大提高.让我们来写一个服务打印hello + 姓名. import java.lang.reflect.InvocationTargetException; import java.l

intellij IDEA mybatis插件破解方法

1>安装mybatis插件,找到mybatis_plus.jar包的位置,在C:\Users\LZHL\.IntelliJIdea2016.3\config\plugins\mybatis_plus\lib 2>新建一个Java Project,把mybatis_plus.jar和javassist-3.17.1.jar添加到工程的Libary 2>新建一个Class: package javaassist; import javassist.CannotCompileException

如何在IDEA上 添加GIT和maven、mybatis插件

IDEA工具上,添加GIT和maven.mybatis插件,相对比较简单: 首先下载GIT.maven.mybatis. 先添加GIT插件: 首先在IDEA找到file中找到setting,然后搜索git,接着将git存放的路径找到即可. 接着是maven插件,也是很简单,打开setting设置,搜索maven,接着路径改了就可以 mybatis的配置,点击run,找到Edit Configurations 接着只需要配置一下即可,在Command line这一行输入mybatis-genera

MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResultS

MyBatis 插件 : 打印 SQL 及其执行时间

Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用: Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResult

SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比

引文 本文主要介绍如何使用mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:mybatis插件(拦截器).mybatis-Plus实体规范.数据对比 1.相关技术简介 mybatis插件: mybatis插件实际上就是官方针对4层数据操作处理预留的拦截器,使用者可以根据不同的需求进行操作拦截并处理.这边笔者不做详细描述,详细介绍请到官网了解,这里笔者就复用官网介绍. 插件(plugins) MyBati

mybatis 插件的原理-责任链和动态代理的体现

目录 1 拦截哪些方法 2 如何代理 3 代理对象 4 责任链设计模式 @ 如果没有自定义过拦截器, 可以看我前面的文章.如果不知道 JDK 动态代理怎么使用的, 可以看我这文章. 责任链设计模式理解起来很简单, 网上找个例子看看即可. mybatis 插件的原理使用的是动态代理和责任链来实现的. 1 拦截哪些方法 在前面说过, 可以通过注解 Intecepts 和 Signature 来进行指定拦截哪些方法. 然而, 并不是说所有的方法都可以拦截的. mybatis 拦截器所拦截的方法, 有如

mybatis插件机制原理

mybatis插件机制及分页插件原理 参考链接:mybatis插件机制及分页插件原理 如何编写一个自定义mybatis插件 参考链接:mybatis 自定义插件的使用 原文地址:https://www.cnblogs.com/jxxblogs/p/12150439.html