首页 > 解决方案 > org.apache.ibatis.type.TypeException:无法设置映射参数:ParameterMapping

问题描述

我在 Springboot 2.0 的 ibatis 中的日期比较出现错误,我没有想法。

我的 Mapper 看起来像这样(使用 MySql):

@Select("select count(s.id,r.date) from eshrsys.score s join eshrsys.round on (s.round_id = r.id) where r.date > '#{date,jdbcType=DATE}'")
Integer getScoreCountFromDate(Date date);

我传入了一个不为空的有效 java.sql.date 对象。但是我在引用日期比较时收到此错误:

2018-09-02 21:14:23.999 错误 5644 --- [nio-8088-exec-2] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet] path [] 抛出异常 [请求处理失败;嵌套异常是 org.mybatis.spring.MyBatisSystemException:嵌套异常是 org.apache.ibatis.type.TypeException:无法设置映射参数:ParameterMapping{property='date',mode=IN,javaType=class java.sql。日期,jdbcType=DATE,numericScale=null,resultMapId='null',jdbcTypeName='null',表达式='null'}。原因:org.apache.ibatis.type.TypeException:使用 JdbcType DATE 为参数 #1 设置非 null 时出错。尝试为此参数或不同的配置属性设置不同的 JdbcType。原因:java.sql.SQLException:

我尝试了许多不同的解决方法,从在发送之前将输入转换为字符串,到删除单引号,再到使用 jdbcType。没有任何效果。

标签: mysqlspring-bootibatis

解决方案


我终于想通了,事实证明这是一个与我想象的完全不同的问题。对上述错误的简单修复是删除 '#{date,jdbcType=DATE}' 周围的单引号。

我最初是这样做的,但得到了一个 MySQL 语法错误“near r.date”,我认为这与我的日期比较有关,但事实并非如此!它在我的“count(s.id,r.date)”声明的开头抱怨 r.date。将其替换为 'count(*)' 修复了该问题。我被解除了封锁。


推荐阅读