Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决
作者:文戌
Springboot整合mybatisplus使用条件构造器排序报错
异常信息
{
"timestamp": "2022-03-23T12:04:29.797+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Error attempting to get column 'create_time' from result set. Cause: java.sql.SQLFeatureNotSupportedException\n; null; nested exception is java.sql.SQLFeatureNotSupportedException",
"path": "/partJob/list"
}
网上查找得知:
数据库中的create_time是datetime类型,mybatis-plus生成代码时生成的是LocalDateTime单mybatis不支持该类型。
方法一
将实体类中的createtime改为DATE类型
方法二
调整Druid版本,升级到1.1.21
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
Mybatis使用IPAGE排序错误
错误信息
//分页排序
page.setOrders(OrderItem.descs("publish_time"));
报错信息
failed to concat orderBy from IPage, exception=null
这里”failed to concat orderBy from IPage, exception=null“只是提示你错误了,但是没有提及是哪里出现问题
检查错误原因
@Test public void testSqlParser() throws Exception{ String sql = ""; CCJSqlParserUtil.parse(sql); }
通过CCJSqlParserUtil.parse可以抛出SQL的问题所在,一般为关键字冲突、函数使用不匹配导致
例子
我这里的SQL为
sql: select a,b,IF(c=1 or d=2,0,1) as f from table;
这里是会提示SQL的IF关键字出现问题,但是这个SQL是可以执行成功,Ipage的排序解析认为这个SQL是错误的
而只有一个IF条件时,解析是正确的,所以这里抛出问题不一定是你的SQL问题,而是这个分页排序的问题
sql: select a,b,IF(c=1,0,1) as f from table;
现在就是两种解决办法:
1.放弃Ipage的排序功能,将排序语句写在SQL中
2.修改IF,在判断中只保留一个条件
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。