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. cmd命令net和sc

    来看windows中启动和关闭服务的方法:在cmd下可有两种方法打开,分别是net和sc. 1.net用于打开没有被禁用的服务, NET命令是功能强大的以命令行方式执行的工具. 它包含了管理网络环境. ...

  2. Python——graphviz及pydotplus安装步骤

    Python——graphviz及pydotplus安装步骤 一.安装Graphviz 网站:http://www.graphviz.org/download/ 下载msi文件 直接安装,完成之后添加 ...

  3. Vehicle routing with Optaplanner graph-theory

    Vehicle routing with Optaplanner - Stack Overflow https://stackoverflow.com/questions/22285252/vehic ...

  4. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  5. SIEBEL BIP报表平台端口被占用

    管理-服务器配置S 找到对应的服务名称: CRMSS2 组件输入:XMLP Report Server 选择[高级]后,查找 Static Port Number 即可修改端口号. 端口号可查询测试环 ...

  6. 提供对字符串的全角->半角,半角->全角转换

    package com.opslab.util.algorithmImpl; import com.opslab.util.StringUtil; /** * 提供对字符串的全角->半角,半角- ...

  7. linux记录-安装elk记录(参考博文)

    什么是ELK? 通俗来讲,ELK是由Elasticsearch.Logstash.Kibana .filebeat三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又 ...

  8. ABAP函数篇2 测试DATE_CONVERT_TO_FACTORYDATE

    DATE_CONVERT_TO_FACTORYDATE   根据日期返回工厂日历日期 函数功能说明: 标出工作日的计算方法 输入传输 CORRECT_OPTION = '+'如果指定的日期不是工作日, ...

  9. Python - Django - 模板语言之 Filters(过滤器)

    通过管道符 "|" 来使用过滤器,{{ value|过滤器:参数 }} Django 的模板语言中提供了六十个左右的内置过滤器 urls.py: from django.conf. ...

  10. LeetCode_290. Word Pattern

    290. Word Pattern Easy Given a pattern and a string str, find if str follows the same pattern. Here  ...