【问题标题】:iBatis SQL Mapper Date ArgumentiBatis SQL Mapper 日期参数
【发布时间】:2019-08-22 09:13:58
【问题描述】:

我刚接触 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: 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.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>

我让它工作了。但我注意到其他 Mapper 他们没有指定每个参数的jdbcType。所以我对这个问题到底是什么以及导致它的原因感到困惑,这是如何发生的,我做错了什么。只需给我信息以进一步了解这件事。谢谢

【问题讨论】:

    标签: java ibatis


    【解决方案1】:

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

    显然 iBatis 处理 java.util.Date 比处理 java.sql.Date 更好

    【讨论】:

    • 就像我说的那样,我在这样做时遇到了错误。由于某种原因,iBatis 无法识别java.util.Date 的jdbcType
    • 你应该使用 java.util.Date,而不是 java.sql.Date
    • 对不起,你能解释一下在 iBatis sqlMapper 中使用java.util.Date 和java.sql.Date 作为参数有什么区别吗?
    • 只是类型不同而已。显然 iBatis 可以比 java.sql.Date 更好地处理 java.util.Date。
    【解决方案2】:

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

    第 26 页,jdbcType 部分

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

    【讨论】:

    • 感谢您指出这一点,显然@e.g78 的答案是正确的,但没有明确解释原因
    • @e.g78 你没有解释为什么和什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多