我刚刚接触 Spring,对 iBatis
有点困惑。我接到一项任务来编辑选择查询条件(非常简单),但事情变得很棘手。
我仅将 java.sql.Date 对象(带有 setter 和 getter)传递给 SQLMapper 以提供条件参数。
这就是我的 WHERE
子句的样子
<sql id="dateWhere">
<where>
<if test="arg.sqlStartDate != null and arg.sqlEndDate != null">
table.date BETWEEN #{arg.sqlStartDate} AND #{arg.sqlEndDate}
</if>
</where>
</sql>
但我收到错误
org.apache.ibatis.type.TypeException:无法设置映射参数:ParameterMapping{property='arg.sqlStartDate',mode=IN,javaType=class java.lang.Object,jdbcType=null, numericScale=null,resultMapId='null',jdbcTypeName='null',表达式='null'}。原因:org.apache.ibatis.type.TypeException
我研究发现我需要指定参数的jdbcType
。 SOlink 。还添加了 DATE()
函数以进一步指定参数是 DATE
变量。
<sql id="dateWhere">
<where>
<if test="arg.sqlStartDate != null and arg.sqlEndDate != null">
table.date BETWEEN DATE(#{arg.sqlStartDate,jdbcType=DATE}) AND DATE(#{arg.sqlEndDate,jdbcType=DATE})
</if>
</where>
</sql>
我成功了。但我注意到其他映射器没有指定每个参数的 jdbcType 。所以我很困惑这个问题到底是什么,是什么原因造成的,这是如何发生的,我做错了什么。请给我信息以进一步了解此事。谢谢
最佳答案
您不需要使用 DATE() 函数。
使用 java.util.Date 而不是 java.sql.Date,并且 table.date BETWEEN #{arg.sqlStartDate} AND #{arg.sqlEndDate}
应该可以。
显然 iBatis 比 java.sql.Date 能更好地处理 java.util.Date
关于java - iBatis SQL 映射器日期参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605873/