SQL映射文件
MyBatis Generator (MBG)生成SQL映射文件遵循MyBatis或iBATIS SQL Map DTD规范. 在表的基础上这些文件还包含了不同的标签和属性配置. MBG按照配置表生成SQL映射文件.表名就是SQL映射文件的命名空间(前提是数据库支持schema和catalog,主流数据库对schema和catalog都支持).MBG不会自动把 SQL映射文件到MyBatis/iBATIS配置文件中 - 您必须手动把xxxMapper.xml
文件加入到配置文件中(或者您使用一个插件使MBG生成配置文件;Spring配置文件可以实现自动扫描xxxMapper.xml
和接口).
每个自动生成的XML方法标签下都包含@mbggenerated
的注释块.在运行的时候@mbggenerated
注释块将删除和替换.其他部分内容将保持不变. 考虑到这点,不用担心在运行时丢失您新增内容--不包括@mbggenerated
块内容.
以下部分描述了将要生成的元素.
注意:下面描述中"BLOB"指任何列的BLOB数据类型包括BLOB, CLOB, LONGVARCHAR, 和 LONGVARBINARY.
结果集
结果集用于数据库表列映射Java对象的属性. 结果集(和相应的查询语句)不包括如下情况:
- 任何列配置
<ignoreColumn>
属性将被会被忽略
- 任何BLOB字段(详见有关BLOBs字段相关映射)
对于列配置<columnOverride>
属性将映射成配置的名称.没有配置使用的是默认的属性和JDBC类型.
对于自定义连接查询结果集继承一个结果集是一种非常常见的用法. 对于其他连接查询也想使用该结果集在MBG自动生成的时候需要配置前缀.详见<table>属性alias配置前缀,这样做法可以区分表中相同字段.
如果table配置enableSelectByExample、enableSelectByPrimaryKey属性为true,MBG会生成结果集,table默认这两个配置都是true,所以大部分情况下都会生成resultMap.
BLOB结果集
表中存在BLOB字段时MBG会自动生成一个BLOB结果集,BLOB结果集继承了除BLOB字段外的基础结果集. 我们提供不同的版本查询语句,来适应查询结果中是否需要BLOB字段.
BLOB结果集(和相应的查询语句)不包括如下情况:
- 任何列配置
<ignoreColumn>
属性将被会被忽略
对于列配置<columnOverride>
属性将映射成配置的名称.没有配置使用的是默认的属性和JDBC类型.
对于自定义连接查询结果集继承一个结果集是一种非常常见的用法.对于其他连接查询也想使用该结果集,在MBG自动生成的时候需要配置前缀.详见<table> 性alias配置前缀,这样做法可以区分表中相同字段.
如果table存在BLOB字段且配置了enableSelectByExample、enableSelectByPrimaryKey属性,MBG会生成BLOB结果集,table默认这两个配置都是true所以大部分情况下都会生成resultMap.
Where条件SQL语句
"by example"方法重用Where条件.被重用的Where条件不包括BLOB字段.大部分表WHERE条件都不支持BLOB字段.
"by example"语句被配置将动态生成Where条件语句.
根据主键查询
select语句按照主键查询返回一行数据.如果表中存在BLOB字段,查询结果中会包含该字段.
如果table配置了enableSelectByExample、enableSelectByPrimaryKey属性为true,MBG会生成结果集,table默认这两个配置都是true所以大部分情况下都会生成resultMap.
根据条件查询
根据条件查询结果集和自动生成对象相匹配. 通过实现一个简单的"query by example"方法可以适用于不同的数据库查询.就算表中存在BLOB字段该查询结果集也不会返回该BLOB字段 (具体返回BLOB字段详见根据条件查询包含BLOB字段结果集部分描述).
重要:条件为空或者没有设置条件时,会将表中所有数据查询出来.
如果table配置了enableSelectByExample属性为true,MBG会生成Example查询.
根据条件查询包含BLOB字段(方法:selectByExampleWithBLOBs)
Example查询结果集和自动生成对象相匹配. 通过实现一个简单的"query by example"方法可以适用于不同的数据库查询.算表中存在BLOB字段该查询结果集将返回该BLOB字段.
重要: 查询条件为空或者没有设置查询条件时,会将表中所有数据查询出来.
如果table配置了enableSelectByExample属性为true,MBG会生成包含BLOB字段的Example查询.
插入
该方法可以插入表中所有字段(包括BLOB字段),但列配置了<ignoreColumn>
属性将不会插入.
如果表有主键自动增长(自动增长列或序列),table子元素配置<generatedKey>
属性,MBG会生成<selectKey>
块语句,一般情况下都不需要配置使用数据库自动增长即可,除非表字段需要使用序列.
重要提示:与iBATIS2和MyBatis3插入的差异.差异如下:
运行 |
特性 |
iBATIS2 |
配置了<generatedKey>属性,插入的时候会返回新的自动增长值.没有配置<generatedKey>属性, 插入返回值为void . |
MyBatis3 |
插入方法将返回插入受影响的行数(通常是0或者1). 配置了<generatedKey>属性,自动增长值会被设置在参数对象中返回. |
如果table配置了enableInsert属性为true,MBG会生成该方法.
选择性插入
该方法可以插入表中所有字段(包括BLOB字段),但列配置了<ignoreColumn>
属性将不会插入.然而,参数对象为空
的列将不会插入值.如果数据库列设置了默认值则取默认值,否则列值是空. 对于列不允许为空
情况-则需要人为确保调用该方法时不为空列确保有值使插入不报错.重要:任何映射到java引用类型的字段都会被该方法插入.
如果表有主键自动增长(自动增长列或序列),table子元素配置<generatedKey>
属性,MBG会生成<selectKey>
块语句,一般情况下都不需要配置使用数据库自动增长即可,除非表字段需要使用序列.
重要提示:与iBATIS2和MyBatis3插入的差异.差异如下:
运行 |
特性 |
iBATIS2 |
配置了<generatedKey>属性,插入的时候会返回新的自动增长值.没有配置.没有配置<generatedKey> 属性, 插入返回值为void . |
MyBatis3 |
插入方法将返回插入受影响的行数(通常是0或者1). I配置了<generatedKey>属性,自动增长值会被设置在参数对象中返回. |
如果table配置了enableInsert属性为true,MBG会生成该方法.
根据主键更新
该方法按照主键修改一行数据.该方法会修改表中所有字段,除非:
- 列配置了
<ignoreColumn>
属性
- BLOB字段(详见根据主键更新包含BLOB字段)
数据库表中存在主键且table配置了enableUpdateByPrimaryKey属性为true,MBG会生成该方法.
根据主键更新包含BLOB字段
该方法按照主键修改一行数据.该方法会修改表中所有字段(包括BLOB字段),除非:
- 列配置了
<ignoreColumn>
属性
数据库表中存在主键包含BLOB列且table配置了enableUpdateByPrimaryKey属性为true,MBG会生成该方法.
根据主键选择性更新
该方法按照主键修改一行数据.该方法会更新表中参数对象属性不为空的列.该方法可以被使用更新某些特定的列而不影响所有列数据. 重要: 任何映射到java引用类型的字段都会被该方法更新.
数据库表中存在主键且table配置了enableUpdateByPrimaryKey属性为true,MBG会生成该方法.
根据主键删除记录
该方法按照主键删除一行数据.
数据库表中存在主键且table配置了enableDeleteByPrimaryKey属性为true,MBG会生成该方法.
根据条件删除记录
该方法按照条件将删除一行或者多行数据.
重要:条件为空或者没有设置条件时, 会将表中所有记录删除.
如果table配置了enableDeleteByExample属性为true,MBG会生成该方法.
根据条件查询记录总数
该方法按照条件查询表中符合条件记录的记录总数.
重要:条件为空或者没有设置条件时,返回表中所有记录总数.
如果table配置了enableCountByExample属性为true,MBG会生成该方法.
根据条件更新记录
该方法按照条件更新表中符合条件记录.该方法会修改表中所有字段,除非:
- 列配置了
<ignoreColumn>
属性
- BLOB字段(详见根据条件修改记录包含BLOB字段)
重要:条件为空或者没有设置条件时, 会将表中所有记录更新.
如果table配置了enableUpdateByExample属性为true,MBG会生成该方法.
根据条件修改记录包含BLOB字段
该方法按照条件更新表中符合条件记录.该方法会修改表中所有字段(包括BLOB字段),除非:
- 列配置了
<ignoreColumn>
属性
重要:条件为空或者没有设置条件时, 会将表中所有记录更新.
如果表存在BLOB字段且table配置了enableUpdateByExample属性为true,MBG会生成该方法.
根据条件选择性更新记录
该方法按照条件更新表中符合条件记录.该方法会更新表中参数对象属性不为空的列.该方法可以被使用更新某些特定的列而不影响所有列数据.重要: 任何映射到java引用类型的字段都会被该方法更新.
重要:条件为空或者没有设置条件时, 会将表中所有记录更新.
如果table配置了enableUpdateByExample属性为true,MBG会生成该方法.