MyBatis Generator 自动生成的POJO对象的使用(一)
MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境):
- Java Model Objects(总是生成)
- SQL Map Files(always for iBATIS, usually for MyBatis)
- Java Client Object(可选项)
- 还会生成一个会在xxxByExample方法中使用到的类。可以参考一下的页面关于该类的信息:
而在MyBatis3DynamicSql运行环境下生成的对象依赖于MyBatis Dynamic Sql 库。这些对象比其他runtimes生成的对象更强大,但它们依赖于MyBatis Dynamic SQL库。
- Java Model Objects
- 一个依赖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对象的使用(一)的更多相关文章
- MyBatis Generator 自动生成的POJO对象的使用(二)
四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...
- SpringBoot 添加mybatis generator 自动生成代码插件
自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...
- idea中mybatis generator自动生成代码配置 数据库是sqlserver
好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generato ...
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...
- 使用Mybatis Generator自动生成Mybatis相关代码
本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...
- IDEA Maven Mybatis generator 自动生成代码
IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...
- IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)
IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...
- java web(七): mybatis的动态sql和mybatis generator自动生成pojo类和映射文件
前言: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据 不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...
- Mybatis generator自动生成mybatis配置和类信息
自动生成代码方式两种: 1.命令形式生成代码,详细讲解每一个配置参数. 2.Eclipse利用插件形式生成代码. 安装插件方式: eclipse插件安装地址:http://mybatis.google ...
随机推荐
- Sqlmap全参数详解
sqlmap全参数详解 sqlmap是在sql注入中非常常用的一款工具,由于其开源性,适合从个人到企业,从学习到实战,各领域各阶段的应用,我们还可以将它改造成我们自己独有的渗透利器.这款工具中,大大小 ...
- 基础学习笔记之opencv(3):haartraining生成.xml文件过程[转]
1.准备正负样本: 在上一讲http://www.cnblogs.com/tornadomeet/archive/2012/03/27/2420088.html 中,我们已经收集到了训练所用的正样本. ...
- OpenJudge 计算概论1007:点评赛车
总时间限制: 1000ms 内存限制: 65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的:2)B说:4号赛车是最好的:3)C说:3号赛车不是最好的:4)D说: B说错了.事实上只 ...
- pdf 中内容的坐标系
PDF Page Coordinates (page size, field placement, etc.) AcroForm, Basics, Automation Page coordinate ...
- 【笔试题】某公司中有N名员工。给定所有员工工资的清单
排列员工工资顺序(C++map解法) 题目描述:某公司中有N名员工.给定所有员工工资的清单,财务人员要按照特定的顺序排列员工的工资.他按照工资的频次降序排列.即给定清单中所有频次较高的工资将在频次较低 ...
- Facebook 对 PHP 的改进
PHP 是传统意义上的解释型语言,而不是编译型语言. 因此,在命令行或 Web 服务器调用解释器解释 PHP 代码之前,PHP 代码就是 PHP 代码.PHP 解释器会解释 PHP 脚本,把代码转换为 ...
- flutter 日志工具类
class LogUtils { //dart.vm.product 环境标识位 Release为true debug 为false static const bool isRelease = con ...
- ISO/IEC 9899:2011 条款6.7.1——存储类说明符
6.7.1 存储类说明符 语法 1.storage-class-specifier: typedef extern static _Thread_local auto register 约束 2.在一 ...
- Android平台云端打包证书使用说明
原贴:https://ask.dcloud.net.cn/article/35985 Android平台云端打包证书使用说明 分类:HBuilderX 证书 Android 签名证书是一个应用的所有者 ...
- 我的一个PLSQL【我】 循环嵌套、游标使用、变量定义、查询插入表、批量提交事务、字符串截取、动态sql拼接执行
代码块: --CREATE OR REPLACE PROCEDURE PRO_REVENUE_STATISTICS --IS DECLARE --计数器 ins_counter PLS_INTEGER ...