iBatis SQL映射器日期参数

时间:2019-08-22 09:13:58

标签: java ibatis

我刚接触Spring,对body { background: url('/img/back1.jpg'); } 有点困惑。我被赋予了编辑选择查询条件的任务(非常简单),但是事情变得棘手。 我仅将iBatis对象(带有setter和getter)传递给SQLMapper以提供条件参数。 这就是我的java.sql.Date子句的样子

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: Could not set parameters for mapping: ParameterMapping{property='arg.sqlStartDate', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeExceptionSOlink。还添加了jdbcType函数以进一步指定该参数是DATE()变量。

DATE

我开始工作了。但是我注意到与其他Mapper一起,他们没有指定每个参数的 <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> 。因此,我对这个问题的真正含义,原因,发生的方式,做错的事情感到困惑。请给我信息以进一步了解此事。谢谢

2 个答案:

答案 0 :(得分:1)

您不需要使用DATE()函数。 使用java.util.Date代替java.sql.Date,table.date BETWEEN #{arg.sqlStartDate} AND #{arg.sqlEndDate}应该可以工作。

显然,iBatis比java.sql.Date可以更好地处理java.util.Date

答案 1 :(得分:1)

https://ibatis.apache.org/docs/java/pdf/iBATIS-SqlMaps-2_en.pdf

第26页的 jdbcType

这是由于JDBC驱动程序无法自动识别某些列的列类型。