MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境):

  1. Java Model Objects(总是生成)
  2. SQL Map Files(always for iBATIS, usually for MyBatis)
  3. Java Client Object(可选项)
  4. 还会生成一个会在xxxByExample方法中使用到的类。可以参考一下的页面关于该类的信息:

  而在MyBatis3DynamicSql运行环境下生成的对象依赖于MyBatis Dynamic Sql 库。这些对象比其他runtimes生成的对象更强大,但它们依赖于MyBatis Dynamic SQL库。

  1. Java Model Objects
  2. 一个依赖MyBatis Dynamic SQL library的mapper接口和一个“support”类。可以参考MyBatis Dynamic SQL Usage Notes页面

  这里我们只讨论前面的几种生成对象。

一、Java Model Classes

  MyBatis Generator(MBG)生成与数据库表中的字段对应的Java类。生成的类是一种领域对象(Domain Object),但绝不应与富领域模型(rich Domain Object)混淆。MBG根据数据库中表和配置选项的特征生成不同类型的“域”对象。

  MBG生成的每个属性和方法都非标准JavaDoc标记——@mbg.generated。当从Eclipse插件运行时,在MBG的后续运行中,将删除并替换包含此JavaDoc标记的每个Java元素。而这些类中的其它Java元素则不会被MBG触碰到。记住这点,你就可以随心所欲添加自己需要的属性和方法,而不用担心在 MBG后续的运行中丢失他们——当然,别对这些元素加@mbg.generated标记就行了。

  在Eclipse插件之外,需要手动合并Java文件,但利用@mbg.generated标记,就可以清楚地知道哪些元素可以安全地删除。

  接下来的部分描述不MBG所产生的同类型的Domain类。MBG依赖<context>配置元素的defaultModelType属性值和<table>配置元素的modelType属性值来生成不同类型的Domain Object。

  

  1.1 Primary Key Class

  此类将包含表的主键中每个字段的属性。属性名称将自动生成,并将基于表中的列名称。可以使用<columnOverride>配置元素覆盖生成的属性名称。

  默认情况下,类的名称为“TableNameKey”,如果在<table>配置元素上指定了domainObjectName属性,则为“domainObjectNameKey”。

  如果表具有一个主键,则将在分层模型(the hierarchical model)中生成此类。 如果表的主键中有多个列,则将在条件模型(the conditional model)中生成此类。 此类不会在平面模型(the flat model)中生成。

  1.2 Record Class

  此类将包含表中每个非BLOB和非主键列的属性。

  如果存在有上述主键类,该类将继承主键类。属性名称将自动生成,并将基于表中的列名称。可以使用<columnOverride>配置元素覆盖生成的属性名称。

  默认情况下,类的名称为“TableName”,如果在<table>配置元素上指定了domainObjectName属性,则为“domainObjectName”。

  如果表具有非BLOB和非主键列,则将在分层模型中生成此类。

  如果表具有非BLOB和非主键列,或者只有一个主键列或一个BLOB列,则将在条件模型中生成此类。

  此类始终在平面模型中生成。

  1.3 Record Class With BLOBSs Class

  此类将包含表中每个BLOB列的属性。

  该类将继承Record Class(如果有),或者它将扩展主键类(请注意,MBG不支持生成仅包含BLOB列的表)。

  属性名称将自动生成,并将基于表中的列名称。 可以使用<columnOverride>配置元素覆盖生成的属性名称。

  此类将是selectByPrimaryKey方法或selectByExampleWithBLOBs方法的返回值。

  该类的名称将默认为“TableNameWithBLOBs”,如果在<table>配置元素上指定了domainObjectName属性,则为“domainObjectNameWithBLOBs“。

  如果表具有任何BLOB列,则将在分层模型中生成此类。 如果表具有多个BLOB列,则将在条件模型中生成此类。 此类不会在平面模型中生成。

  1.4 Example Class

  该类用于与MBG的动态选择功能一起使用。

  该类包含一组标准(criteria ),用于在运行时为以下方法生成动态WHERE子句:

  • selectByExample
  • selectByExampleWithBLOBs
  • deleteByExample
  • countByExample
  • updateByExample

  此类不扩展(继承)任何其他模型类。

  类的名称默认将是«TableNameExample»,或«domainObjectNameExample»,如果在<table>配置元素上指定了domainObjectName属性的话。

  如果任何“*ByExample”方法可以能够使用的话,该类就会被生成。

  请注意,如果表中有许多字段,则此类可能会变得非常大,但DAO方法很小,生成的XML片段也很小。

  如果您不打算使用动态WHERE子句功能,则可能希望禁用这些方法的生成。

  有关使用示例类的详细信息,请参考: Example Class Usage

二、SQL Map Files

  MyBatis Generator(MBG)生成符合MyBatis或iBATIS SQL Map DTD的SQL Map文件。这些文件包含许多不同的元素,这些元素基于表的特征以及您指定的配置选项。

  MBG为您指定的每个表生成不同的SQL Map文件。 SQL Map的name space是表的名称(由schema和目录限定,如果存在),实际的namespace是Mapper类。

  MBG不会将SQL Map条目添加到MyBatis / iBATIS配置文件中 - 您必须手动执行此操作(或者如果您愿意,可以使用插件使MBG生成框架配置文件)。

  每个生成的XML元素都包含一个XML注释部分,其中包含字符串@ mbg.generated。在后续运行中,将删除并替换包含带有字符串@mbg.generated的注释的每个元素。XML文件中的任何其他元素都将保持不变。考虑到这一点,您可以将其他元素添加到文件中,而不必担心在后续运行中丢失它们 - 只需在任何元素注释中不包含字符串@ mbg.generated。

  以下部分描述了将生成的元素。 注意:在以下描述中,术语“BLOB”用于指代数据类型为BLOB,CLOB,LONGVARCHAR或LONGVARBINARY的任何列。

  (其中定义了14个通用的CRUD方法)

  2.1、Result Map

  此元素用于将数据表的列映射到生成的Java模型对象中的属性。

  Result Map(和相应的select语句)将不包含:

  • <ignoreColumn>配置元素忽略的任何字段;
  • 表中的任何BLOB字段(参见带有BLOBs元素的结果映射)

  如果特定列存在,则将根据配置元素<columnOverride>映射表中的列。如果override不存在,则将使用默认属性名称和JDBC类型。

  如果在SQL映射中编写任何自定义连接(join)查询,则可以扩展此结果映射。这是一个常见的用例,并且是预期的。您计划将此结果映射与其他连接查询一起使用,您可能希望让MBG为结果映射中的字段生成前缀。有关生成前缀的信息,请参阅<table>参考页面。

  如果启用了select by example, or select by primary key 语句,则将生成此元素。

  2,2、Result Map With BLOBs

  该元素扩展了基本的Result Map,并添加了表中存在的任何BLOB字段。

  我们这样做是因为我们提供了不同版本的select by example语句,具体取决于您是否要在这些查询中返回BLOB字段。

  Result Map(和相应的select语句)将不包含:<ignoreColumn>配置元素忽略的任何字段。

  如果特定列存在,则将根据其配置元素<columnOverride>映射列。如果override不存在,则将使用默认属性名称和JDBC类型。

  

  如果在SQL映射中编写任何自定义连接(join)查询,则可以扩展此结果映射。这是一个常见的用例,并且是预期的。您计划将此结果映射与其他连接查询一起使用,您可能希望让MBG为结果映射中的字段生成前缀。有关生成前缀的信息,请参阅<table>参考页面。

  如果该表包含BLOB字段并且启用了select by example, or select by primary key 语句,则将生成此元素

  2.3、SQL Where Clause

  此元素包含“by example”方法使用的可重用where子句。

  如果表中存在任何BLOB字段,则where子句将不包括任何BLOB字段。大多数数据库不支持WHERE子句中的BLOB字段。

  2.4、Select By Primary Key

  此元素包含一个select语句,该语句将返回一行 - 由主键指定。 返回的行将包含BLOB字段(如果它们存在于表中)。

  如果表具有主键并且启用了select by primary key语句,则将生成此元素。

  2.5、Select By Example

  此元素包含一个select语句,其中的行与示例对象匹配。 这实现了一个简单的“按示例查询”功能,可用于生成许多不同的数据库查询。

  返回的行将不包含表中存在的任何BLOB字段(请参阅下面的BLOBs语句选择示例)。

  要点:如果示例类为null,或者未设置任何条件(criteria ),则将选择表中的所有行。

  如果启用了select by example语句,则将生成此元素。

  2.6、Select By Example With BLOBs

  此元素包含一个select语句,其中的行与示例对象匹配。 这实现了一个简单的“按示例查询”功能,可用于生成许多不同的数据库查询。 返回的行将包括表中存在的任何BLOB字段。

  要点:如果示例类为null,或者未设置任何条件,则将选择表中的所有行。

  如果表包含BLOB字段,则将生成此元素,并启用select by example语句。

  

  2.7、Insert

  此元素是一个insert语句,包含表中的所有字段(包括BLOB),除非使用<ignoreColumn>配置元素专门忽略该字段。

  如果表具有自动生成的key(标识列或序列中的值),并且指定了<generatedKey>配置元素,则MBG将生成相应的<selectKey>元素。

  重要说明:插入方法在iBATIS2和MyBatis3中的工作方式不同。下表总结了差异:

Runtime Behavior
iBatis2 如果指定了<generatedKey>元素,则该方法将返回新生成的键。如果未指定<generatedKey>元素,则该方法将为void。
MyBatis3 该方法将返回插入的行数(通常为0或1)。如果指定了<generatedKey>元素,则新生成的键的值将在参数对象的相应属性中设置。

  如果启用了insert语句,则将生成此元素。  

  2.8、Insert Selective

  此元素是一个insert语句,包含表中的所有字段(包括BLOB),除非使用<ignoreColumn>配置元素专门忽略该字段。 但是,此语句不包括参数对象中为null的字段。 这允许您使用列的数据库默认值(如果存在)。

  此元素不允许将null插入任何字段 - 因为您必须使用常规insert语句。

  重要说明:任何映射到Java原始类型的字段都会是同该方法进行插入。

  如果表具有自动生成的key(标识列或序列中的值),并且指定了<generatedKey>配置元素,则MBG将生成相应的<selectKey>元素。

  重要说明:插入方法在iBATIS2和MyBatis3中的工作方式不同。差异和上表相同:

  2.9 、Update By Primary Key

  此元素是一个更新语句,它将更新一行 - 由主键指定。

  update语句将更新表中的所有字段,除非:

  • <ignoreColumn>配置元素已忽略该字段
  • 该字段是一个BLOB字段(请参阅主键更新BLOBs元素)

  如果表具有主键,并且启用主键更新语句,则将生成此元素。

  2.10、Update By Primary Key With BLOBs

  此元素是一个更新语句,它将更新一行 - 由主键指定。 update语句将更新表中的所有字段(包括BLOB字段),除非:<ignoreColumn>配置元素已忽略该字段

  如果表具有主键,该表具有BLOB列,并且启用了主键更新语句,则将生成此元素。

  2.11、Update By Primary Key Selective

  此元素是一个更新语句,它将更新一行 - 由主键指定。

  update语句将仅更新表中的参数对象的属性为非null的字段。

  语句可用于更新record中的某些列,而不会影响record中的所有列。 重要说明:如果列已映射到基本类型,则该列将始终更新。 

  如果表具有主键,则将生成此元素,并且启用主键更新语句。

  2.12、Delete By Primary Key

  该元素是一个删除语句,它将删除表中的一行 - 由主键指定。

  如果表具有主键,则将生成此元素,并且启用“按主键删除”语句。

  2.13、Delete By Example

  此元素是一个删除语句,它将删除表中的一行或多行 - 由示例对象指定。

  要点:如果示例类为null,或者未设置任何条件,则表中的所有行都将被删除。

  如果启用了“按示例删除”语句,则将生成此元素。

  2.14、Count By Example

  此元素是一个select count(*)语句,它将返回表中与指定示例对象匹配的行数。

  要点:如果示例类为null,或者未设置任何条件,则select将返回整个表中的行数。  

  如果启用了count by example语句,则将生成此元素。

  2.15、Update By Example

  此元素是一个更新语句,它将更新表中与指定示例匹配的所有行。

  update语句将更新表中的所有字段,除非:

  • <ignoreColumn>配置元素已忽略该字段
  • 该字段是一个BLOB字段(请参阅BLOBs元素的示例更新)

  要点:如果示例类为null,或者未设置任何条件,则表中的所有行都将更新。

  如果启用了通过example语句更新,则将生成此元素。

  2.16、Update By Example With BLOBs

  此元素是一个更新语句,它将更新表中与指定示例匹配的所有行。

  update语句将更新表中的所有字段(包括BLOB字段),除非:<ignoreColumn>配置元素已忽略该字段

  要点:如果示例类为null,或者未设置任何条件,则表中的所有行都将更新。

  如果表包含BLOB列,并且启用了“按示例更新”语句,则将生成此元素。

  2.17、Update By Example Selective

  此元素是一个更新语句,它将更新表中与指定示例匹配的所有行。

  update语句将仅更新表中的参数对象的属性为非null的字段。

  此语句可用于更新某些记录中的某些列,而不会影响记录中的所有列。重要说明:如果列已映射到基本类型,则该列将始终更新。

  要点:如果示例类为null,或者未设置任何条件,则表中的所有行都将更新。

  如果启用了通过example语句更新,则将生成此元素。

  三、Java Client Objects

  MyBatis Generator(MBG)生成多种类型的Java客户端对象。

  Java客户端对象用于更容易地与生成的XML元素进行交互。 对于配置中的每个表,MBG会生成一个或多个Java客户端对象。

  对于MyBatis 3,这些是映射器接口(Mapper接口)。 对于iBATIS 2.x,这些是DAO接口和实现类。

  生成Java客户端对象是可选的,由<javaClientGenerator>配置元素控制。 MBGr可以生成以下类型的客户端:

  For MyBatis 3.x:

  • XMLMAPPER - for use with the MyBatis 3.x mapper support

  For iBATIS 2.x:

  • IBATIS - for use with the iBATIS DAO Framework
  • SPRING - for use with the Spring Framework
  • GENERIC-CI - with no dependencies beyond the iBATIS Data Mapper
  • GENERIC-SI - also with no dependencies beyond the iBATIS Data Mapper

  生成的每个字段和方法都包含非标准JavaDoc标记@ mbg.generated。 从Eclipse插件运行时,在后续运行中,将删除并替换包含此JavaDoc标记的每个字段和方法。 该类中的任何其他字段或方法都不会受到影响。

  考虑到这一点,您可以向类中添加其他字段和方法,而不必担心在后续运行中丢失它们 - 只需在您添加到类中的任何内容上不要包含@ mbg.generated JavaDoc标记。

  在Eclipse插件之外,需要手动合并Java文件,但是您可以使用@mbg.generated JavaDoc标记来了解从文件的先前版本中删除的安全性。

  Note: in the following descriptions, the term "BLOB" is used to refer to any column with a data type of BLOB, CLOB, LONGVARCHAR, or LONGVARBINARY.

  3.1、Methods Common to All DAO Types

  根据表的具体情况和配置选项,Java客户端生成器将生成以下方法:

  • countByExample
  • deleteByPrimaryKey
  • deleteByExample
  • insert
  • insertSelective
  • selectByPrimaryKey
  • selectByExample
  • selectByExampleWithBLOBs
  • updateByPrimaryKey (with an override to specify whether or not to update BLOB columns)
  • updateByPrimaryKeySelective (will only update non-null fields in the parameter class)
  • updateByExample (with an override to specify whether or not to update BLOB columns)
  • updateByExampleSelective (will only update non-null fields in the parameter class)

  MBG尝试通过生成不同的对象和方法来更轻松地处理包含BLOB的表,以便您可以使用BLOB字段,或根据情况忽略它们。

  有关使用selectByExample方法的示例,请参阅Example Class Usage页面。

  3.2、XMLMAPPER Clients (MyBatis 3.x) 

  XMLMAPPER客户端是将映射到生成的XML映射器文件中的方法的接口。

  例如,假设MBG生成了一个名为MyTableMapper的接口。 您可以按如下方式使用接口:

  SqlSession sqlSession = sqlSessionFactory.openSession();

  try {
MyTableMapper mapper = sqlSession.getMapper(MyTableMapper.class);
List<MyTable> allRecords = mapper.selectByExample(null);
} finally {
sqlSession.close();
}

  有关如何创建sqlSessionFactory实例的详细信息,请参阅标准MyBatis文档。

  其余的几个小节都和ibatis有关,忽略。

MyBatis Generator 自动生成的POJO对象的使用(一)的更多相关文章

  1. MyBatis Generator 自动生成的POJO对象的使用(二)

    四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...

  2. SpringBoot 添加mybatis generator 自动生成代码插件

    自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...

  3. idea中mybatis generator自动生成代码配置 数据库是sqlserver

    好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generato ...

  4. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  5. 使用Mybatis Generator自动生成Mybatis相关代码

    本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...

  6. IDEA Maven Mybatis generator 自动生成代码

    IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...

  7. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  8. java web(七): mybatis的动态sql和mybatis generator自动生成pojo类和映射文件

    前言: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据 不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...

  9. Mybatis generator自动生成mybatis配置和类信息

    自动生成代码方式两种: 1.命令形式生成代码,详细讲解每一个配置参数. 2.Eclipse利用插件形式生成代码. 安装插件方式: eclipse插件安装地址:http://mybatis.google ...

随机推荐

  1. Sqlmap全参数详解

    sqlmap全参数详解 sqlmap是在sql注入中非常常用的一款工具,由于其开源性,适合从个人到企业,从学习到实战,各领域各阶段的应用,我们还可以将它改造成我们自己独有的渗透利器.这款工具中,大大小 ...

  2. 基础学习笔记之opencv(3):haartraining生成.xml文件过程[转]

    1.准备正负样本: 在上一讲http://www.cnblogs.com/tornadomeet/archive/2012/03/27/2420088.html 中,我们已经收集到了训练所用的正样本. ...

  3. OpenJudge 计算概论1007:点评赛车

    总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...

  4. pdf 中内容的坐标系

    PDF Page Coordinates (page size, field placement, etc.) AcroForm, Basics, Automation Page coordinate ...

  5. 【笔试题】某公司中有N名员工。给定所有员工工资的清单

    排列员工工资顺序(C++map解法) 题目描述:某公司中有N名员工.给定所有员工工资的清单,财务人员要按照特定的顺序排列员工的工资.他按照工资的频次降序排列.即给定清单中所有频次较高的工资将在频次较低 ...

  6. Facebook 对 PHP 的改进

    PHP 是传统意义上的解释型语言,而不是编译型语言. 因此,在命令行或 Web 服务器调用解释器解释 PHP 代码之前,PHP 代码就是 PHP 代码.PHP 解释器会解释 PHP 脚本,把代码转换为 ...

  7. flutter 日志工具类

    class LogUtils { //dart.vm.product 环境标识位 Release为true debug 为false static const bool isRelease = con ...

  8. ISO/IEC 9899:2011 条款6.7.1——存储类说明符

    6.7.1 存储类说明符 语法 1.storage-class-specifier: typedef extern static _Thread_local auto register 约束 2.在一 ...

  9. Android平台云端打包证书使用说明

    原贴:https://ask.dcloud.net.cn/article/35985 Android平台云端打包证书使用说明 分类:HBuilderX 证书 Android 签名证书是一个应用的所有者 ...

  10. 我的一个PLSQL【我】 循环嵌套、游标使用、变量定义、查询插入表、批量提交事务、字符串截取、动态sql拼接执行

    代码块: --CREATE OR REPLACE PROCEDURE PRO_REVENUE_STATISTICS --IS DECLARE --计数器 ins_counter PLS_INTEGER ...