在利用Mybatis-Plus代码生成工具后,代码测试出现java.sql.SQLSyntaxErrorException: Unknown column 'create_time' in 'field list'异常。

### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Unknown column 'create_time' in 'field list'
### The error may exist in com/yy/dao/TestUserDao.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT id,name,sex,address,create_time FROM test_user WHERE id=?
### Cause: java.sql.SQLSyntaxErrorException: Unknown column 'create_time' in 'field list'
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'create_time' in 'field list'

	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
	at com.sun.proxy.$Proxy82.selectOne(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
	at com.sun.proxy.$Proxy90.selectById(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344……

原因:

出现这种请通常顾名思义就是数据据列名不匹配,最简单明了的方法就是检查数据库信息,表信息,以及实体类命名在xml文件中的映射信息,如果有问题就进行修改一致即可。

但是发现基本没有问题,并且跟异常信息最大的不同在于我们数据库列名明明是驼峰式“createTime”,但是在sql查询信息中变成了下划线式的“create_time”。 但是sql语句并不是我们自己书写的,由此可以想到,可能是因为MyBatis-Plus在自动生成代码时,默认采用的是驼峰转连字符模式。因此当我们在构建数据库时,如果列名的命名方式时驼峰式命名,MyBatis-Plus在封装构建sql时,自动转换成连字符,于是出现了执行SQL语句时,并没有在数据库里找到对应的连字符列名,所以出现这个异常。

解决:

解决办法很简单,就是在.yml(或.properties)文件配置MyBatis-Plus信息时,配置禁止大写变小写时自动添加下划线。

mybatis-plus:
  mapper-locations: classPath*:/mapper/*.xml
  configuration:
    map-underscore-to-camel-case: false # 禁止大写变小写时自动添加下划线

这样,问题就迎刃而解了……

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐