自动将MySQL数据库所有驼峰字段名转下划线形式

在JFinal4.9中,已官方支持了将下划线形式的字段名转驼峰形式,而业内在对mysql数据库的字段命名上,一般也是用下划线形式。我此前的大部分jfinal项目里的数据库字段名都是驼峰形式的,为了更符合规范,想将字段名都变成下划线形式的。但是一一去改确实太麻烦,所以写了段代码,可以一键将通过工具(如:Navicat)自动导出的sql文件里的字段名从驼峰形式转下划线形式,如userId可转成user_id等。现将代码分享给大家,如有需要可借鉴:

public static void main(String[] args) {
    try {
        BufferedReader br = new BufferedReader(new FileReader(PathKit.getWebRootPath() + "\\src\\main\\resources\\yoursql.sql"));
        String sqlStr = br.lines().collect(Collectors.joining("\n"));
        Matcher matcher = Pattern.compile("`([\\w]*)`").matcher(sqlStr);
        StringBuilder sb = new StringBuilder();
        while (matcher.find()) {
            matcher.appendReplacement(sb, doConvert(matcher.group(0)));
        }
        matcher.appendTail(sb);
        System.out.println(sb.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

private static String doConvert(String keyword) {
    if (keyword.matches("[\\S]*[A-Z][\\S]*")) {
        for (int i = 0; i < keyword.length(); i++) {
            char key = keyword.charAt(i);
            if (Character.isUpperCase(key)) {
                String keyStr = key + "";
                keyword = keyword.replace(keyStr, "_" + keyStr.toLowerCase());
            }
        }
    }
    return keyword;
}

评论区

zzutligang

2020-09-21 12:16

支持!

JFinal

2020-09-21 12:21

数据库字段以往用的下划线,只是历史路径依赖,并没有什么特别的优势

我在字段中用驼峰很多年了,一点问题没有

JFinal

2020-09-21 12:22

数据库字段以往用的下划线,只是历史路径依赖,并没有什么特别的优势

我在字段中用驼峰很多年了,一点问题没有,优势是显然的,字段名与 java 对象名统一为驼峰以后,写代码时更流畅了,减少认知负担,因为你脑子里只有一个驼峰,忘掉下划线

李通

2020-09-28 10:56

@JFinal 完全舍弃下划线是不可能,在公司的规定的中有数据库命名规范,要求必须使用下划线,规范已经制定了好多年,改变太难了

JFinal

2020-09-28 22:11

@李通 jfinal 有生成器生成 getter、setter 是支持下划线的,并没有完全舍弃