企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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>](../configreference/table.html)属性alias配置前缀,这样做法可以区分表中相同字段. 如果table配置enableSelectByExample、enableSelectByPrimaryKey属性为true,MBG会生成结果集,table默认这两个配置都是true,所以大部分情况下都会生成resultMap. ## BLOB结果集 表中存在BLOB字段时MBG会自动生成一个BLOB结果集,BLOB结果集继承了除BLOB字段外的基础结果集. 我们提供不同的版本查询语句,来适应查询结果中是否需要BLOB字段. BLOB结果集(和相应的查询语句)不包括如下情况: * 任何列配置`<ignoreColumn>`属性将被会被忽略 对于列配置`<columnOverride>`属性将映射成配置的名称.没有配置使用的是默认的属性和JDBC类型. 对于自定义连接查询结果集继承一个结果集是一种非常常见的用法.对于其他连接查询也想使用该结果集,在MBG自动生成的时候需要配置前缀.详见[<table>](../configreference/table.html) 性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会生成该方法.