码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis 之mapUnderscoreToCamelCase

时间:2015-02-08 00:27:57      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

之前用spring jdbc的时候发下spring可以驼峰转换,所以一直希望mybatis也有,之前还以为mybatis这个是个bug,后来发现原来也是有的,用起来也是很简单的,setting设置下就可以了,这里就不说了,下面说下是怎么实现的

 

 public String findProperty(String name) {
    StringBuilder prop = buildProperty(name,new StringBuilder());
    return prop.length() > 0 ?prop.toString() : null;
  }
 
  public String findProperty(String name,boolean useCamelCaseMapping) {
    if (useCamelCaseMapping) {
      name = name.replace("_","");
    }
    return findProperty(name);
  }


 

如果我们设置了,useCamelCaseMapping=ture,那么mybatis就把_给干掉了,看到这里我也很疑惑,还以为是坑爹呢,

我们接着往下看,buildProperty

private StringBuilderbuildProperty(String name, StringBuilder builder) {
    PropertyTokenizer prop = newPropertyTokenizer(name);
    if (prop.hasNext()) {
      String propertyName =reflector.findPropertyName(prop.getName());
      if (propertyName != null) {
        builder.append(propertyName);
        builder.append(".");
        MetaClass metaProp =metaClassForProperty(propertyName);
       metaProp.buildProperty(prop.getChildren(), builder);
      }
    } else {
      String propertyName =reflector.findPropertyName(name);
      if (propertyName != null) {
        builder.append(propertyName);
      }
    }
    return builder;
  }


其实是从reflector获取的数据,做个reflector是干嘛的呢,其实就是mybatis来存储class信息的,也可以说是mybatis的反射工具类

 

Reflector里面

public StringfindPropertyName(String name) {

    returncaseInsensitivePropertyMap.get(name.toUpperCase(Locale.ENGLISH));

  }

做个toUpperCase是个关键,他忽略了我们类里面的属性值,也就是说我们一个id和一个ID属性,对于mybatis来说可能是一直的呦

 

private Map<String, String>caseInsensitivePropertyMap = new HashMap<String, String>();

存储的就是field upperCaseName和真实的Name 也就是我们的驼峰转换,或者其实不对称的驼峰也是可以的,只要把_去掉,应该就可以拿到的

Mybatis 之mapUnderscoreToCamelCase

标签:

原文地址:http://blog.csdn.net/qjueyue/article/details/43617383

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!