java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot整合mybatisplus使用条件构造器排序报错

Springboot整合mybatisplus时,使用条件构造器排序报错问题及解决

作者:文戌

这篇文章主要介绍了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,在判断中只保留一个条件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文