org.apache.ibatis.type.TypeException:无法设置用于映射的参数:ParameterMapping

时间:2018-09-03 04:26:07

标签: mysql spring-boot ibatis

在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);

我要传递一个不为null的有效java.sql.date对象。但是我在引用日期比较时遇到了这个错误:

  

2018-09-02 21:14:23.999错误5644 --- [nio-8088-exec-2]   o.a.c.c.C。[。[。[/]。[dispatcherServlet]:的Servlet.service()   路径[]中的servlet [dispatcherServlet]抛出异常   [请求处理失败;嵌套异常为   org.mybatis.spring.MyBatisSystemException:嵌套的异常是   org.apache.ibatis.type.TypeException:无法设置参数   映射:ParameterMapping {property ='date',mode = IN,javaType = class   java.sql.Date,jdbcType = DATE,numericalScale = null,resultMapId ='null',   jdbcTypeName ='null',expression ='null'}。原因:   org.apache.ibatis.type.TypeException:错误设置为非null   参数#1和JdbcType DATE。尝试为设置不同的JdbcType   此参数或其他配置属性。原因:   java.sql.SQLException:参数索引超出范围(1>个   参数,即0)。]

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

1 个答案:

答案 0 :(得分:0)

我终于弄清楚了,事实证明这是一个与我怀疑的完全不同的问题。解决以上错误的简单方法是删除“#{date,jdbcType = DATE}”周围的单引号。

我最初是这样做的,但是遇到了MySQL语法错误“ n。r.date”,我认为这与我的日期比较有关,但事实并非如此!它在我的'count(s.id,r.date)'语句开头抱怨r.date。用'count(*)'代替它可以解决此问题。而且我不受阻。