java - iBatis SQL 映射器日期参数

标签 java ibatis

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

我研究发现我需要指定参数的jdbcTypeSOlink 。还添加了 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/

相关文章:

java - Java 中的 SQLite 连接池 - 锁定数据库

java - 来自 Project euler 的问题 4 的改进解决方案

java - Spring中的@Transaction

java - 在 iBatis 中,如何将 'JOIN' 与 null 属性一起使用?

java - "Type interface is not known to the MapperRegistry"使用mybatis异常

java - 用于从 MySQL 数据库检索在线状态的任何性能解决方案

java - StackOverflowError和随机数

java - 简单的命令行 xquery

java - 如何在应用程序级别管理只读数据库连接

java - JMock 模拟对象可以返回另一个模拟对象吗?