mybatis的map-underscore-to-camel-case参数设置为true时,可以将数据库的带下划线“”给去掉然后映射到实体类的属性上去。
mybatis映射属性时的逻辑大致是:
1、先将字段的""去掉,具体见代码MetaClass的findProperty方法:
public String findProperty(String name, boolean useCamelCaseMapping) {
if (useCamelCaseMapping) {
name = name.replace("_", "");
}
return findProperty(name);
}
2、将字段转成大写,然后查找对象中匹配的属性,具体代码见Reflector.findPropertyName方法:
public String findPropertyName(String name) {
return caseInsensitivePropertyMap.get(name.toUpperCase(Locale.ENGLISH));
}
从以上分析可以看见,其实mybatis的驼峰法映射并不是严格限制的驼峰法语法,具体来说,对应“aa_bb”字段,其既可以匹配上“aaBb”属性,也可以匹配上“Aabb”属性。这一点在日常写代码时需要注意下。
还有一个需要特别关注的时,当属性映射不成功时,在调试代码时注意检查MetaClass的findProperty的useCamelCaseMapping参数,在某些情况下,比如有多个数据源时,会导致该参数不生效,需要换另外一种配置方式,具体的配置方式请查找其他材料,本文不再赘述。