在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。没事。
答案 0 :(得分:0)
我终于弄清楚了,事实证明这是一个与我怀疑的完全不同的问题。解决以上错误的简单方法是删除“#{date,jdbcType = DATE}”周围的单引号。
我最初是这样做的,但是遇到了MySQL语法错误“ n。r.date”,我认为这与我的日期比较有关,但事实并非如此!它在我的'count(s.id,r.date)'语句开头抱怨r.date。用'count(*)'代替它可以解决此问题。而且我不受阻。