驼峰和下划线互转

public class HumpLineUtil {
	
	 private static Pattern humpPattern = Pattern.compile("[A-Z]");  
	 private static Pattern linePattern = Pattern.compile("(_)(\\w)");  
     
     /**
      * 驼峰转下划线
      * @param str
      * @return
      */
     public static String humpToLine2(String str){  
         Matcher matcher = humpPattern.matcher(str);  
         StringBuffer sb = new StringBuffer();  
         while(matcher.find()){  
             matcher.appendReplacement(sb, "_"+matcher.group(0).toLowerCase());  
         }  
         matcher.appendTail(sb);  
         return sb.toString();  
     }  
     
     public static String humpToLine(String str){
         return str.replaceAll("[A-Z]", "_$0").toLowerCase();  
     }  
     
     /**
      * 下划线转驼峰
      * @param str
      * @return
      */
     public static String lineToHump(String str){
    	 //str = str.toLowerCase();  
         Matcher matcher = linePattern.matcher(str);  
         StringBuffer sb = new StringBuffer();  
         while(matcher.find()){  
             matcher.appendReplacement(sb, matcher.group(2).toUpperCase());  
         }  
         matcher.appendTail(sb);  
         return sb.toString();  
     }  

     public static void main(String[] args) {  
       String str="p_arentUuid";
        str= lineToHump(str);
       System.out.println(str);
     }  
     
}

 

<think>我们正在讨论MyBatisPlus中驼峰命名与下划线命名的转换配置及使用方法。根据引用内容,我们可以总结如下:1.在MyBatisPlus中,可以通过配置`map-underscore-to-camel-case`属性来开启或关闭驼峰命名与下划线命名的自动转换。2.当开启该配置时(设置为true),MyBatisPlus会自动将数据库中的下划线命名字段(如`user_name`)映射到Java实体类的驼峰命名属性(如`userName`)。3.如果数据库字段不符合下划线命名规则,或者实体类属性不符合驼峰命名规则,则可能导致映射失败,此时可以通过`@TableField`注解来指定映射关系。###配置方法在MyBatisPlus的配置文件中(通常是`application.yml`或`application.properties`),添加如下配置:YAML格式(application.yml):```yamlmybatis-plus:configuration:#开启驼峰下划线互转,默认为true(可不配置)map-underscore-to-camel-case:true```Properties格式(application.properties):```propertiesmybatis-plus.configuration.map-underscore-to-camel-case=true```###使用注意事项1.**默认行为**:MyBatisPlus默认开启驼峰命名转换(即`map-underscore-to-camel-case`默认为true),所以如果你使用的是默认配置,则无需显式配置。2.**特殊情况处理**:-如果数据库字段名不是下划线格式,或者实体类属性名不是驼峰格式,则需要使用`@TableField`注解来明确指定映射关系。-例如,数据库字段名为`userPassword`(没有下划线),而实体类属性名为`userPassword`(驼峰格式,但数据库字段实际是驼峰,不符合下划线规则),此时自动转换可能无法匹配。这时可以在实体类属性上添加注解:```java@TableField("userPassword")privateStringuserPassword;```-或者,将数据库字段名改为下划线格式(如`user_password`),以符合自动转换的规则。###示例代码假设数据库表结构如下:```sqlCREATETABLEuser(idBIGINTPRIMARYKEYAUTO_INCREMENT,user_nameVARCHAR(50),--下划线命名user_passwordVARCHAR(50)--下划线命名);```对应的Java实体类:```javapublicclassUser{privateLongid;privateStringuserName;//驼峰命名,对应数据库的user_nameprivateStringuserPassword;//驼峰命名,对应数据库的user_password//省略gettersetter}```在这个例子中,由于开启了驼峰命名自动转换(默认开启),MyBatisPlus会自动将`user_name`映射到`userName`,将`user_password`映射到`userPassword`。###常见问题1.**字段映射失败**:如果实体类属性与数据库字段无法自动映射(比如数据库字段是`username`,而实体类属性是`userName`),则需要在属性上使用`@TableField`注解指定数据库字段名:```java@TableField("username")privateStringuserName;```2.**关闭自动转换**:如果不需要自动转换,可以将`map-underscore-to-camel-case`设置为false。此时,实体类属性名必须与数据库字段名完全一致(包括大小写下划线),否则需要使用`@TableField`注解。###总结-默认情况下,MyBatisPlus会自动进行驼峰命名与下划线命名的转换,无需额外配置。-当数据库字段名不符合下划线命名或实体类属性名不符合驼峰命名时,需要使用`@TableField`注解来指定映射关系。-可以通过配置文件显式设置`map-underscore-to-camel-case`属性来开启或关闭自动转换。§§相关问题§§1.MyBatisPlus中`@TableField`注解还有哪些常用属性?2.如何全局配置MyBatisPlus的字段映射策略?3.MyBatisPlus在多数据源环境下如何配置驼峰命名转换?</think>### MyBatis Plus驼峰命名与下划线转换配置及使用 #### 1. **配置方法** 在MyBatis Plus中,只需在配置文件中添加以下设置即可开启自动转换: ```yaml mybatis-plus: configuration: map-underscore-to-camel-case: true # 开启驼峰下划线自动互转 ``` **说明**: - 此配置**默认开启**(若未显式配置则默认为`true`) - 开启后,数据库字段如 `user_name` 会自动映射到实体类属性 `userName` - 关闭时需显式设置为 `false` #### 2. **使用场景与规则** | **场景** | **实体类属性** | **数据库字段** | **是否需额外操作** | |-------------------------|----------------|--------------------|-------------------| | 标准转换 | `userName` | `user_name` | 自动完成 ✅ | | 全小写字段 | `createdate` | `createdate` | 自动完成 ✅ | | 不符合规则的字段 | `userPassword` | `user_password` ❌ | 需手动注解 ⚠️ | #### 3. **特殊字段处理** 当数据库字段不符合下划线命名规范时(如`userPassword`),需使用`@TableField`注解: ```java public class User { @TableField("userPassword") // 显式指定数据库字段名 private String userPassword; } ``` **原因**:MyBatis Plus的自动转换**仅支持标准下划线格式** → 驼峰的转换。 #### 4. **代码生成器注意事项** 使用MyBatisX等代码生成工具时: 1. 确保工具生成**驼峰命名的实体类属性** 2. 数据库字段必须为**下划线格式**(如 `user_password`) 3. 若工具生成字段名与数据库不一致,需通过`@TableField`修正 #### 5. **验证配置是否生效** 测试用例: ```java @Autowired private UserMapper userMapper; public void testMapping() { User user = userMapper.selectById(1); // 若数据库有user_name字段,实体类有userName属性 System.out.println(user.getUserName()); } ``` 若报错 `Unknown column 'user_name' in 'field list'`,检查: 1. 配置是否开启 `map-underscore-to-camel-case: true` 2. 是否存在非标准命名字段 > **最佳实践**:保持数据库字段为下划线格式(如`create_time`),实体类属性为驼峰格式(如`createTime`),可避免手动注解[^1][^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值