Mybatis plus使用Page对象进行分页查询时异常问题处理

  • 异常打印
    [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘dto.aaa’, mode=IN, javaType=class java.lang.Object, jdbcType=NVARCHAR, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘null’}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType NVARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType NVARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: 无效的列索引]

  • 查看生成countsql逻辑
    在这里插入图片描述
    根据源码我们查看到在上图的位置会生成countsql

// 这个方法中第一个参数为sql优化,默认为开启,第二个为组装的sql
//SELECT COUNT(*) FROM qhyu t WHERE 1 = 1 AND t.CREATED_BY = ? 
autoCountSql(page.optimizeCountSql(), boundSql.getSql()

打印出来的sql只有一个参数,为什么报错信息提示第二个参数绑定的时候出错了。
此时我发现我们的countsql是进行优化过后的sql,将left join中的一部分给优化了,其中left join中还有where条件。
查看官网发现确认问题
在这里插入图片描述

  • 解决方案
    传入的page对象设置page.setOptimizeCountSql(false);
    重启项目,查看countSql,发现就是在我们的查询语句外层包装select count(*),没有进行优化,这个时候设置参数就没问题了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Thomas & Friends

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

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

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

打赏作者

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

抵扣说明:

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

余额充值