今天在写代码的过程中碰到了一个很有意思的bug,我在user数据表中定义如下:
而我在实体类中定义如下:
在运行代码的时候却报了如下的错误
### Cause: java.sql.SQLSyntaxErrorException: Unknown column 'user_name' in 'field list'
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'user_name' in 'field list'
错误意思是“字段列表”中的数据字段“user_name”未知列,真的是奇了怪了,我命名时用的是驼峰命名,明明没有用到user_name
这样的下划线命名,为啥会报这样的错呢?
后来在mybatisPlus
官网上找到了答案。在mybatisPlus官方文档
中这样介绍
mapUnderscoreToCamelCase
- 类型:boolean
- 默认值:true
是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。
注意
此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中,此属性也将用于生成最终的 SQL 的 select body
如果您的数据库命名符合规则无需使用 @TableField
注解指定数据库字段名
大概的意思就是,mybatisPlus
会默认开启下划线命名
到驼峰命名
的类似映射,所以才会有从userName
到user_name
的出现,想要解决到这个bug,只需要将对应的默认值修改为false
即可,即在配置文件(例如application.yml或application.properties)中添加以下配置:
mybatis-plus:
configuration:
map-underscore-to-camel-case: false
或者
mybatis-plus.configuration.map-underscore-to-camel-case=false
以上配置将关闭下划线转驼峰之间的映射。