全局配置文件之settings [运行时行为设置]

全局配置文件之settings(运行时行为设置)

settings设置的是Mybatis中极为重要的调整设置, 它们会改变Mybatis的运行时行为, settings中包含了很多重要的设置项, 其中每一个setting子标签就对应了一个设置项
  • 其中setting子标签中的name属性用来设置项名, value属性用来设置项取值

常用的设置项:

  1. mapUnderscoreToCamelCase
    • 描述: 是否开启驼峰命名规则(CamelCase)映射, 即从经典的数据库列名(A_COLUMN)到经典的Java属性名aColumn的类似映射 —> 其实也就是从下刷线命名的方式转换为驼峰命名的方式
      • Underscore : 下划线命名
      • CamelCase : 驼峰命名
    • 有效值: true / false
    • 默认值: false

当设置了如下:

<settings>
    <setting name = "mapUnderscoreToCamelCase" value = "true"></setting>
</settings>

那么我们的数据库中的A_COLUMN字段就会直接匹配到JavaBean中的对应的aColumn属性, 从而建立映射关系, 那么我们就不需要给数据库中的A_COLUMN列起别名为aColumn了, 这种设置是很方便的, 我们后面也会经常使用到这个设置

  1. autoMappingBehavior

    • 描述: 是否开启自动映射, 如果开启了之后对于数据库中的列名如果和我们想要封装到的JavaBean中属性名完全一致的时候我们可以直接将我们对应的数据库中的列的数据封装到我们的JavaBean的对应属性中

    • 有效值:

      1. NONE : 表示不开启自动映射, 即使是单张表查询的时候也不会开启自动映射
      2. PARTIAL : 表示开启自动映射, 但是只是在单表查询的时候开启, 如果我们使用多表查询的时候就会关闭自动映射
      3. 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属性中
        • 规律总结: 一般情况下: 我们使用到多表查询的时候, 我们的映射关系就要使用resultMap来指明, 而不是使用resultType, 我们只要是使用了resultMap的时候, 就几乎要么使用association标签, 要么就使用collection标签, 如果我们没有使用分步查询, 那么这个时候我们几乎就肯定是要使用id标签和result标签指明所有的映射关系
          • 但是注意: 如果我们使用到了分步查询, 那么这个时候我们某些情况下是不用指明对应的映射关系的, 因为如果我们使用了分步查询的时候这个时候其实我们并不算是一个多表查询, 这个时候我们是使用了多个单表查询完成的, 这个时候对于单表查询我们autoMappingBehavior项的值为默认值的情况下, 我们就是单表情况下自动映射, 而且这种映射肯定是不会出现像多表查询中如果设置autoMappingBehavior值为FULL的那种一个列赋给多个JavaBean中的属性的情况的, 因为我们此时只是在一个表中进行映射
    • 默认值: PARTIAL

  2. logImpl

    • 描述: 指定Mybatis所用日志的具体实现, 如果未指定将自动查找
    • 常用值: STAOUT_LOGGING
    • 默认值: 无(没有默认值, 没有设置默认值)
下划线命名和驼峰命名还有短横线命名方式之间可以相互转换

单词积累:

partial : 部分的, 不完全的

  • 出现于原文中的autoMappingBehavior的默认取值, 默认取值就是PARTIAL, 表示不完全的, 就是只有单表的时候会自动映射
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值