【开发技巧】驼峰和下划线命名相互转换

Java如何实现数据库中表字段的下划线和驼峰式命名的Model相互转换,很方便的... 其实通过逆向工程,然后去配置一些config,就可以实现,从Table到Model的相互转换,而且,对于下划线命名的Table字段,实现驼峰式命名的Model ,有时候我们只是做个测试,或者自己基于数据的表,想快速建立Model,怎么实现呢!! 一、准备工作,好点的编辑器,支持多行编辑的,IDEA就可以,还有UE,Hbuilder等 1.1 先查出某张表的所有字段,copy 一下,这是下划线命名的... 阅读详情

开发时,一般数据库的字段命名是下划线风格,Java编程时字段命名一般是驼峰风格。
在实体和域模型创建初期,我们经常需要对同一字段进行命名风格的反复切换。

talk is cheap, show me the code.

测试用例

package com.itplh.generator;

public class ConvertTest {

    public static void main(String[] args) {
        Underline2JavaPrivateFieldConverter.run();

        HumpField2UnderlineConverter.run("D:\\User.java");
    }

}

控制台输出

private String username;
private String createTime;
private String lastUpdateTime;
username
create_time
last_update_time

input.txt

username
create_time
last_update_time

User.java

@Data
public class User {
    private String username;
    private String createTime;
    private String lastUpdateTime;
}

驼峰转下划线

HumpField2UnderlineConverter.java

package com.itplh.generator;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class HumpField2UnderlineConverter {

    public static void run(String classAbsolutePath) {
        try (BufferedReader reader = new BufferedReader(new FileReader(classAbsolutePath))) {
            reader.lines()
                    .map(String::trim)
                    .filter(e -> e.startsWith("private "))
                    .map(e -> e.split(" ")[2])
                    .map(e -> e.endsWith(";") ? e.substring(0, e.length() - 1) : e)
                    .map(HumpField2UnderlineConverter::convertHump2Underline)
                    .forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static String convertHump2Underline(String humpField) {
        StringBuilder underlineField = new StringBuilder();
        for (int i = 0; i < humpField.length(); i++) {
            char c = humpField.charAt(i);
            if (c >= 'A' && c <= 'Z') {
                underlineField.append('_').append((char) (c + 32));
                continue;
            }
            underlineField.append(c);
        }
        return underlineField.toString();
    }

}

PS:也可以使用java.beans.Introspector#getBeanInfo(java.lang.Class<?>, java.lang.Class<?>)来读取类的属性名。

下划线转驼峰

Underline2JavaPrivateFieldConverter.java

package com.itplh.generator;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class Underline2JavaPrivateFieldConverter {

    public static void run() {
        try (BufferedReader reader = new BufferedReader(new FileReader("CodeGenerator/input.txt"))) {
            reader.lines()
                    .map(e -> e.trim().toLowerCase())
                    .filter(e -> e.length() > 1)
                    .map(line -> {
                        return Arrays.stream(line.split(" "))
                                .findFirst()
                                .map(e -> e.startsWith("`") ? e.substring(1, e.length() - 1) : e)
                                .map(Underline2JavaPrivateFieldConverter::javaPrivateFieldSplicer)
                                .orElse("");
                    }).forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String javaPrivateFieldSplicer(String underlineField) {
        return "private String " + convertUnderline2Hump(underlineField) + ";";
    }

    private static String convertUnderline2Hump(String underlineField) {
        underlineField = underlineField.trim();
        if (underlineField.startsWith("_") || underlineField.endsWith("_")) {
            return underlineField;
        }
        underlineField = underlineField.toLowerCase();

        StringBuilder humpField = new StringBuilder();
        humpField.append(underlineField.charAt(0));
        for (int i = 1; i < underlineField.length(); i++) {
            if ('_' == underlineField.charAt(i)) {
                i++;
                humpField.append((char) (underlineField.charAt(i) - 32));
                continue;
            }
            humpField.append(underlineField.charAt(i));
        }
        return humpField.toString();
    }

}
2024年最全【高效开发工具系列】驼峰下划线互转_hutool驼峰转下划线,关于网络优化你必须要知道的重点 工具类:/\*\*\* 驼峰转下划线\* @return本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。 阅读详情

相关推荐

Python中驼峰命名法和下划线命名法相互转换的实战代码

本文主要介绍了Python中驼峰命名法和下划线命名法相互转换的实战代码,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 实战代码

weixin_43178406的博客 6万+

mybatisPlus入门应用Wrapper查询/驼峰下划线转换/sql执行日志,分页查询,通用IService增删改查

mybatisplus

奔跑的菜鸡 9498

多智能体强化学习MASAC算法:从原理到PyTorch实战详解

深度强化学习通过智能体与环境的交互试错来学习最优策略,是解决复杂序列决策问题的核心技术。其核心原理在于利用价值函数或策略梯度来最大化累积奖励,在机器人控制、游戏AI等领域展现出巨大技术价值。当面对多个智能体需要协同或竞争的复杂动态环境时,单智能体算法因环境非平稳性而面临挑战,多智能体强化学习应运而生。Multi-Agent Soft Actor-Critic (MASAC) 算法融合了SAC的稳定高效与中心化训练去中心化执行的范式,通过维护中心化Critic网络和独立策略网络,有效解决了多智能体协作中的信用

weixin_30080745的博客 326

MyBatis-Plus-入门操作(1)

MyBatis-Plus-入门操作

简单点的博客 2081

华硕ROG玩家国度安装Ubuntu双系统避坑指南:安全启动密钥那些事儿

本文详细解析了在华硕ROG玩家国度设备上安装Ubuntu双系统时,如何正确处理BIOS中的安全启动(Secure Boot)与密钥管理,避免常见的引导失败和Windows系统无法启动问题。指南提供了从数据备份、启动盘制作到BIOS精细设置(如将OS Type改为Other OS而非简单关闭Secure Boot)以及分区规划的完整流程,确保两个系统都能稳定共存。

weixin_29219189的博客 752

openEuler 欧拉 安装Oracle19c数据库RPM包安装

欧拉系统安装部署oracle 19c rpm方式

陈苏漾的IT生涯 6891

Mybatis Plus实现QueryWrapper支持POJO属性入参,实现property到column的自由转换

业务场景: 1.数据库命名不规范,采用驼峰,后因规范化需要改为下划线 对于queryWrapper.eq(Bean::getSomeProp,propVal)这样的代码,影响不大 但是对于queryWrapper.eq("propName",propVal)这样的代码,影响极大(MP原生只支持下划线转驼峰的配置,且eq条件只支持SFunction和column) 方案一:将所有类似eq的地...

m0_37149617的博客 6358

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1043

java 实现驼峰式(类名)命名和下划线(数据库)命名之间的转化

数据表中的字段名我们通常以“_”分隔,而在Java的实体类中我们的字段属性通常采用驼峰式命名。封装工具类对其进行一次性的转换使用

m0_58813405的博客 2517

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 492

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

我哎GIS博客 814

php 转驼峰,PHP实现驼峰和下划线互转

本篇文章教大家实现驼峰命名和下划线命名互转,在php开发中经常需要两种命名法互相转换,下面为大家提供两种实现方式.第一种方法效率相对差一些,实现方式如下://驼峰命名转下划线命名function toUnderScore($str){$dstr = preg_replace_callback('/([A-Z]+)/',function($matchs){return '_'.strtolower(...

weixin_42490307的博客 1401

华为OD机考2025C卷 - 精准核酸检测(Java & Python& JS & C++ & C语言)

华为OD机考2025C卷 - 精准核酸检测,提供在线OJ Java & Python& JS & C++ & C

算法大师! 2881

常用的正则

换行符与&lt;br/&gt;相符替换str = str.replace(/&lt;br\s*\/?&gt;/gi, "\r\n");str = str.replace(/\r?\n/g, "&lt;br/&gt;");正则replace不能用字符串拼接,只能用new RegExp(key, 'g');eg:angular.forEach(apiTagMap, function (api, key...

weixin_41914782的博客 258

YOLO26改进策略【卷积层】| HWD,引入`Haar小波变换`到下采样模块中,减少信息丢失

本文记录的是。传统的卷积神经网络中常用的最大池化平均池化和步长为2的卷积等操作进行下采样可能会导致信息丢失,为了解决信息丢失问题,HWD作者受无损信息变换方法的启发,引入Haar小波变换到下采样模块中,

Limiiiing的博客 344

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

PHP下划线驼峰相互转换

一、代码二、转载地址 一、代码 /** * 下划线转驼峰 * 思路: * step1.原字符串转小写,原字符串中的分隔符用空格替换,在字符串开头加上分隔符 * step2.将字符串中每个单词的首字母转换为大写,再去空格,去字符串首部附加的分隔符. * @param $uncamelized_words * @param string $separator * @return string */ function camelize($uncamelized_words,$separator=.

夏已微凉、 1750

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 使用 Guava Util 实现驼峰、下划线互转

1 自定义代码实现 1.1 驼峰转下划线 // 自定义正则表达式 private static final Pattern HUMP_PATTERN = Pattern.compile("[A-Z0-9]"); private static String humpToLine(String str) { Matcher matcher = HUMP_PATTERN.matcher(str...

Long-Tai 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java中驼峰与下划线的写法互转

亲测可用: import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 驼峰法-下划线互转 * @author cshaper * @since 2015.07.04 * @version 1.0.0 */ public class Underline2Camel { /** ...

xuyx001的博客 692

驼峰和下划线转化

// 下划线转换驼峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return letter.toUpperCase(); }); } // 驼峰转换下划线 function toLine(name) { return name.replace(/([...

关灯吃面 744

javascript 驼峰命名与下划线命名相互转化

// 下划线转换驼峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return letter.toUpperCase(); }); } // 驼峰转换下划线 function toLine(name) { return name.replace(/([A-Z])/g,"_$1").toLowerCase(); } ...

人,一定要有激情 850

php类属性命名驼峰还是下划线,PHP实现驼峰命名和下划线命名互转

本篇文章教大家实现驼峰命名和下划线命名互转,在php开发中经常需要两种命名法互相转换,下面为大家提供两种实现方式.第一种方法效率相对差一些,实现方式如下://驼峰命名转下划线命名 function toUnderScore($str) { $dstr = preg_replace_callback('/([A-Z] )/',function($matchs) { r...

weixin_39746282的博客 433

Hutool工具库中JSON字段命名风格转换技巧解析

在日常开发中,我们经常需要处理不同命名风格的JSON数据。特别是在前后端交互、多系统对接等场景下,前端通常使用驼峰式命名(userName),而后端数据库字段往往采用下划线命名(user_name)。Hutool作为Java开发工具库,提供了便捷的命名风格转换方案。 ## 核心解决方案 Hutool的JSONObject类支持通过构造函数的第三个参数实现键名的实时转换,这个参数是一个Functi...

gitblog_01408的博客 445

JS驼峰命名和下划线互转

下划线转换驼峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return letter.toUpperCase(); }); } 驼峰转换下划线 function toLine(name) { return name.replace(/([A-Z])...

xdhc的博客 890

java 驼峰转换

将"_"转换成驼峰,将驼峰转换成"_"。 import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 驼峰转换 * @author 胡汉三 * 2017年1月19日 下午4:42:58 */ public class BeanHump { //转变的依赖字符 public static final

胡汉三 4335

下划线驼峰互换

// 下划线转换驼峰 function toHump(name) { return name.replace(/_(\w)/g, function(all, letter){ return letter.toUpperCase(); }); } // 驼峰转换下划线 function toLine(name) { return name.replace(/([A-Z])/g,"_$1").toLo...

weixin_45549435的博客 227

js字符串驼峰和下划线互相转换

// 下划线转换驼峰 'file_name' => 'fileName' function toHump(name) { return name.replace(/\_(\w)/g,function(all, letter){ return letter.toUpperCase(); }); } // 驼峰转换下划线...

愚人码头的博客 78
上一篇: 【Mybatis】使用 org.apache.ibatis.parsing.PropertyParser 造一个自己的模板引擎
下一篇: 1电脑配置
tanpenggood
博客等级 码龄9年 129粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值