使用mybatisPlus驼峰映射出现问题, 数据库字段没有采用下划线的方式

本文解决MyBatisPlus在使用驼峰命名规则时,实体类字段与数据库字段映射不匹配的问题。通过添加@TableField注解指定数据库字段名,实现正确映射,避免运行时错误。

数据库字段与实体类对应不上的问题

如图所示

在这里插入图片描述

很明显, 数据库中的zoneId和provinceId并没有采用下划线的方式 , 这就导致mybatisPlus内部封装的curd可能会报错, 如使用 xxxService.list()方法时,
    @ApiOperation("获取省列表")
    @PostMapping("/getProvinces")
    public ResultUtils<SaleProvince> getProvinces() {
//        List<SaleProvince> list = saleProvinceService.getProvinceList();
        List<SaleProvince> list = saleProvinceService.list();
        return ResultUtils.success("查询成功", list);
    }

就会产生下面的错误,

在这里插入图片描述
因为我在配置文件配置的是, 驼峰映射, 所以, mybatisPlus会默认去把实体类的所有的驼峰转化为下划线的方式去数据库中寻找对应的字段, 即去数据库中寻找zone_id字段, 但是数据库中并没有这个字段, 所以就会导致报错 。

解决方案:

给实体类中不符合驼峰规范的字段添加注解, @TableFiled(value=“数据库中对应的字段名称”)
在这里插入图片描述
测试一下: 查询正常
在这里插入图片描述

总结:建议数据库表设计严格遵守驼峰规范命名, 避免不必要的麻烦, 规范些, 没坏处。也能提高自己的开发效率

<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//省略getter和setter}```在这个例子中,由于开启了驼峰命名自动换(默认开启),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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意田天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值