我使用的是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);
Mapper 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。
由于 奇拉格
答案 0 :(得分:0)
从Eduardo Macarron(myBatis开发人员)获得解决方案
我明白了。这是一个有趣的发现。看看你发布的表达。
没有逗号分隔属性名称和模式!
正在发生的事情是,3.0和3.1承认使用空格作为分隔符,虽然它没有记录,未经测试,至少在我的情况下未知:)
3.2解析代码得到了改进,现在它支持一个定义良好的语法:
并且空格不是有效的分隔符(因此属性实际上可以称为“输入日期”)。
这种改变是不受欢迎的,但一年前在3.2中引入,所以恐怕我们不能回去了。
我希望你错过了逗号,这不是故意的。遗憾!