我在springboot2.0的ibatis中遇到了一个日期比较错误,我已经没有主意了。
我的Map程序如下(使用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.[/].[dispatcherservlet]:路径为[]的上下文中servlet[dispatcherservlet]的servlet.service()引发异常[请求处理失败;嵌套异常为org.mybatis.spring.mybatissystemexception:嵌套异常为org.apache.ibatis.type.typeexception:无法设置Map参数:parametermapping{property='date',mode=in,javatype=class java.sql.date,jdbctype=date,numericscale=null,resultmapid='null',jdbctypename='null',expression='null'}。原因:org.apache.ibatis.type.typeexception:将参数#1和jdbctype date设置为非null时出错。请尝试为此参数设置其他jdbctype或其他配置属性。原因:java.sql.sqlexception:参数索引超出范围(1>参数数,即0)。]
我尝试了许多不同的解决方法,从在发送输入之前将输入转换为字符串,到删除单引号,再到使用jdbctype。什么都没用。
1条答案
按热度按时间pzfprimi1#
我终于明白了这一点,结果发现这是一个非常不同的问题,我怀疑。解决上述错误的简单方法是删除#{date,jdbctype=date}周围的单引号。
我一开始是这么做的,但是得到了一个mysql语法错误'near r.date',我认为这与我的日期比较有关,但事实并非如此!它在我的“count(s.id,r.date)”声明的开头抱怨r.date。用“count(*)替换它修复了这个问题。我被解除了封锁。