java获取对象所有下划线风格的私有字段【方便mapper.xml中指定字段】

实现效果

运行工具类,直接将指定对象的所有驼峰风格的字段转换成下划线风格输出,方便写mybatis的mapper.xml文件
在这里插入图片描述

前情提要

如果使用mybatis的话,为了提高查询效率,我们经常会指定字段名,而有些字段在数据库是下划线分割,而在java实体类中则是小驼峰的方式,如图:
在这里插入图片描述
这时如果我们可以使用工具类直接提取下划线风格的字段,复制粘贴写代码就很舒服

封装字段提取工具类

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author: lzp
 * @description: 自用对象工具类,不使用在业务中,方便开发中一些操作
 * @Date: 2022/7/25
 */
public class FieldUtils {

    public static Pattern PATTERN_HUMP_TO_CASE = Pattern.compile("[A-Z]");
    public static Pattern PATTERN_CASE_TO_HUMP = Pattern.compile("[A-Z]");

    /**
     * 获取传入对象,下划线风格的所有私有字段
     *
     * @param clazz 对象的字节码
     */
    public static List<String> getFieldsToCase(Class clazz) {
        Field[] fields = clazz.getDeclaredFields();
        List<String> list = new ArrayList<>();
        for (Field field : fields) {
            // 将字段名称转换为下划线风格
            list.add(humpToCase(field.getName()));
        }
        return list;
    }

    /**
     * @Description 将驼峰转为下划线 underline
     */
    public static String humpToCase(String str) {
        Matcher matcher = PATTERN_HUMP_TO_CASE.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * @Description 将下划线转为驼峰
     */
    public static String caseToHump(String str) {
        str = str.toLowerCase();
        Matcher matcher = PATTERN_CASE_TO_HUMP.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(0).toUpperCase().replace("_", ""));
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

}

编写测试类

user类:

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

/**
 * @author lzp
 * @Description: groovy script auto generate
 */
@Data
@TableName("user")
public class User {

    /**
     * 自增id
     */
    private Integer id;

    /**
     * nickName
     */
    private String nickName;

    /**
     * 1男 2女 0未知
     */
    private Integer sex;

    /**
     * 用户名 保证唯一
     */
    private String userName;

    /**
     * 创建时间
     */
    private Date createTime;

}

测试类

public class Demo {
    public static void main(String[] args) {
        System.out.println(FieldUtils.getFieldsToCase(User.class));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值