【Java】下划线命名转驼峰命名,通过反射设置属性值

在mybatis中进行对象关系映射时,肯定会用到的一个功能就是,对属性赋值,且还要满足下划线命名与驼峰命名的规范. 在这里记录一下是如何实现的

/**
 * 下划线转驼峰
 * @param name 属性名
 * @return name 驼峰命名
 */
public String toHump(String name){
   if (name.contains("_")){
       Pattern pattern = Pattern.compile("_(\\w)");
       name = name.toLowerCase();
       Matcher matcher = pattern.matcher(name);
       StringBuffer sb = new StringBuffer();
       while (matcher.find()){
           matcher.appendReplacement(sb,matcher.group(1).toUpperCase());
       }
       matcher.appendTail(sb);
       return sb.toString();
   }
   return name;
}

/**
 * 根据字段名称设置,对象属性
 * @param o 要设置值的对象
 * @param columnName 字段名
 * @param columnValue 字段值
 */
public void setFieldValueForColumn(Object o,String columnName,Object columnValue){
    Class<?> clazz = o.getClass();
    try {
        // 根据字段获取属性
        Field field = clazz.getDeclaredField(columnName);
        // 私有属性开放权限
        field.setAccessible(true);
        field.set(o,columnValue);
        field.setAccessible(false);
    } catch (NoSuchFieldException | IllegalAccessException e) {
        // 没有找到对应的属性名,可能是下划线命名,在异常处理中装换
        if (columnName.contains("_")){
            // 重新调用方法设置属性
            setFieldValueForColumn(o,this.toHump(columnName),columnValue);
        }
    }
}

@Test
public void test1(){
    String name = "USER_NAME";
    String s = toHump(name);
    System.out.println(s); // userName
}

@Test
public void test2(){
    User user= new User();
    this.setFieldValueForColumn(vo,"user_name","用户名");
    System.out.println(user);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值