2

我使用的是 mybatis-3.1.1,下面的代码没有问题。

DAO 实施

    @Override
public ItunesPriorityReportDates getWeeklyPriorityDates(Date reportRunDate){

    ItunesPriorityReportDates itunesPriorityReportDates = new ItunesPriorityReportDates();
    Map<String,Object> weeklyPriorityDatesParamMap = new HashMap<>();

    weeklyPriorityDatesParamMap.put("reportRunDate", reportRunDate);

    log.debug("Report Run Date : " + reportRunDate);

    this.getItunesAnalysisMapper().getWeeklyPriorityDates(weeklyPriorityDatesParamMap);

    itunesPriorityReportDates.setAriaWeekStartDate((Date)weeklyPriorityDatesParamMap.get("ariaWeekStartDate"));
    itunesPriorityReportDates.setAriaWeekEndDate((Date)weeklyPriorityDatesParamMap.get("ariaWeekEndDate"));
    itunesPriorityReportDates.setitunesAccountPeriodStartDate((Date)weeklyPriorityDatesParamMap.get("itunesAccountPeriodStartDate"));
    itunesPriorityReportDates.setitunesAccountPeriodEndDate((Date)weeklyPriorityDatesParamMap.get("itunesAccountPeriodEndDate"));

    return itunesPriorityReportDates;

}

映射器

    public ItunesPriorityReportDates getWeeklyPriorityDates(Map<String,Object> weeklyPriorityDatesParamMap);

映射器 XML。

    <select id="getWeeklyPriorityDates" parameterType="java.util.HashMap" statementType="CALLABLE">
    {CALL external_reporting.itunes_sales.get_weekly_priority_dates(#{reportRunDate                 mode=IN, jdbcType=DATE},
                                                                    #{ariaWeekStartDate             mode=OUT, jdbcType=DATE},
                                                                    #{ariaWeekEndDate               mode=OUT, jdbcType=DATE},
                                                                    #{itunesAccountPeriodStartDate  mode=OUT, jdbcType=DATE},
                                                                    #{itunesAccountPeriodEndDate    mode=OUT, jdbcType=DATE}
                                                                    )
    }
</select>

升级到 mybatis-3.2.5 后,它现在将 null 作为 DATE 传递给 Oracle 过程。

你能帮我解决这个问题吗?不确定我是否必须更新我的映射器 XML 并包含一些东西来告诉它正确解析。

我在 java 中使用 java.util.Date。

谢谢奇拉格

4

1 回答 1

0

从 Eduardo Macarron(myBatis 开发者)那里得到解决方案

我知道了。这是一个有趣的发现。看看你发布的表情。

{reportRunDate 模式=IN,jdbcType=DATE},

没有逗号分隔属性名称和模式!

正在发生的事情是 3.0 和 3.1 承认使用空格作为分隔符,尽管这是无证的,未经测试的,至少在我的情况下是未知的 :)

3.2 解析代码得到了改进,现在它支持定义良好的语法:

  • 内联参数表达式解析器。支持的语法(简体):
  • inline-parameter = (propertyName | 表达式) oldJdbcType 属性
  • propertyName = /表达式语言的属性导航路径/
  • 表达式 = '(' /表达式语言的表达式/ ')'
  • oldJdbcType = ':' /任何有效的jdbc类型/
  • 属性 = (',' 属性)*
  • 属性=名称'='值

并且空格不是有效的分隔符(因此属性实际上可以称为“输入日期”)。

这种变化是不必要的,但一年前在 3.2 中引入,所以恐怕我们不能回去了。

我希望你只是错过了逗号,那不是故意的。对不起!

于 2014-02-23T22:21:40.440 回答