全局配置文件之settings(运行时行为设置)
settings设置的是Mybatis中极为重要的调整设置, 它们会改变Mybatis的运行时行为, settings中包含了很多重要的设置项, 其中每一个setting子标签就对应了一个设置项
- 其中setting子标签中的name属性用来设置项名, value属性用来设置项取值
常用的设置项:
- mapUnderscoreToCamelCase
- 描述: 是否开启驼峰命名规则(CamelCase)映射, 即从经典的数据库列名(A_COLUMN)到经典的Java属性名aColumn的类似映射 —> 其实也就是从下刷线命名的方式转换为驼峰命名的方式
- Underscore : 下划线命名
- CamelCase : 驼峰命名
- 有效值: true / false
- 默认值: false
- 描述: 是否开启驼峰命名规则(CamelCase)映射, 即从经典的数据库列名(A_COLUMN)到经典的Java属性名aColumn的类似映射 —> 其实也就是从下刷线命名的方式转换为驼峰命名的方式
当设置了如下:
<settings>
<setting name = "mapUnderscoreToCamelCase" value = "true"></setting>
</settings>
那么我们的数据库中的A_COLUMN字段就会直接匹配到JavaBean中的对应的aColumn属性, 从而建立映射关系, 那么我们就不需要给数据库中的A_COLUMN列起别名为aColumn了, 这种设置是很方便的, 我们后面也会经常使用到这个设置
-
autoMappingBehavior
-
描述: 是否开启自动映射, 如果开启了之后对于数据库中的列名如果和我们想要封装到的JavaBean中属性名完全一致的时候我们可以直接将我们对应的数据库中的列的数据封装到我们的JavaBean的对应属性中
-
有效值:
- NONE : 表示不开启自动映射, 即使是单张表查询的时候也不会开启自动映射
- PARTIAL : 表示开启自动映射, 但是只是在单表查询的时候开启, 如果我们使用多表查询的时候就会关闭自动映射
- FULL : 一直开启自动映射, 单表查询的时候和多表查询的时候都是开启的
-
注意: 对于autoMappingBehavior的取值我们还是一般都是选择默认值, 即使我们将自动映射的设置项的值设置为FULL之后, 我们的多表查询的时候如果直接使用自动映射, 这个时候还是有相应的问题的: —> 当我们关联了s表和d表之后(s表代表的是Student(学生) g表代表的是年级), 这个时候如果我们只是查询出了学生表中(s表中)的id属性值, 这个时候假如我们是查询学生, 那么学生对应年级的时候是多对一的关系, 所以这个时候我们要使用association标签来完成对级联属性的封装(这个时候因为我们的学生表中有一个属性是年级对象的引用, 这个时候我们要对这个年级对象的引用赋值, 这个时候我们还是多对一的关系, 这个时候我们就要使用到association标签来完成), 我们直接在resultMap中对Student对象中的id属性等等赋值, 但是当赋值到Student对象中的grade属性的时候, 这个时候grade是级联属性, 这个时候我们grade属性是一个引用类型, 表示的是一个年级对象, 我们的Grade类中也是有id属性的, 这个时候我们开启了autoMappingBehavior的值为FULL, 那么就是即使是我们对于多表查询的时候我们也是会开启自动映射的, 所以这个时候如果我们对于JavaBean中的属性名和数据库中列名相同的属性没有显示的使用id或者result标签绑定映射关系的时候, 这个时候我们就会使用自动映射给对应的具有自动映射关系的属性赋值, 这个时候我们的Student类和我们的Grade类中都有一个id属性, 然后我们的数据表中查出的S表中的id属性了, 这个时候我们根据自动映射关系就会将对应的id列封装到我们的Student类和我们的Grade类中的id属性中, 此时就出现问题了, 我们命名只是查询了S表中的id属性, 我们想要的是我们的查询出的S表中id类封装到我们的Student表中的id属性中, 但是这个时候显然是出现了问题, 我们的S表中的id类同时封装到了我们的Student表和我们的Grade表的id属性中
-
默认值: PARTIAL
-
-
logImpl
- 描述: 指定Mybatis所用日志的具体实现, 如果未指定将自动查找
- 常用值: STAOUT_LOGGING
- 默认值: 无(没有默认值, 没有设置默认值)
下划线命名和驼峰命名还有短横线命名方式之间可以相互转换
单词积累:
partial : 部分的, 不完全的
- 出现于原文中的autoMappingBehavior的默认取值, 默认取值就是PARTIAL, 表示不完全的, 就是只有单表的时候会自动映射