Декларация за извикване на myBatis - издаване на дата на java

Използвах 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.util.Date в java.

Благодаря Чираг


person Chirag Jhaveri    schedule 20.02.2014    source източник
comment
Опитвали ли сте jdbcType=TIMESTAMP? Това е, което използвам.   -  person David Stanley    schedule 21.02.2014
comment
Опитах. Разработчикът на myBatis ми помогна и те решиха това. Това беше недокументирана промяна, която се случи преди около година. Те спряха да използват пространството като разделител. Нямах запетая между името на свойството и РЕЖИМА. #{reportRunDate mode=IN, току-що добави запетая след reportRunDate и работи като чар. Същото нещо добави запетая след всяко име на свойство и работи.   -  person Chirag Jhaveri    schedule 24.02.2014


Отговори (1)


Получих решение от Едуардо Макарон (разработчик на myBatis)

Разбрах. Това е интересна находка. Обърнете внимание на израза, който сте публикували.

{reportRunDate mode=IN, jdbcType=DATE},

Няма запетая, разделяща името на свойството и режима!

Това, което се случва е, че 3.0 и 3.1 признаха използването на интервал като разделител, въпреки че това беше недокументирано, нетествано и поне в моя случай неизвестно :)

Кодът за разбор на 3.2 беше подобрен и сега поддържа добре дефинирана граматика:

  • Анализатор на израз на вграден параметър. Поддържана граматика (опростена):
  • inline-параметър = (propertyName | израз) атрибути oldJdbcType
  • propertyName = /път за навигация на свойството на езика на израза/
  • израз = '(' /израз на езика на израза/ ')'
  • oldJdbcType = ':' /всеки валиден jdbc тип/
  • атрибути = (',' атрибут)*
  • атрибут = име '=' стойност

И интервалът не е валиден разделител (така че свойствата всъщност могат да се наричат ​​„дата на въвеждане“).

Тази промяна беше нежелана, но беше въведена в 3.2 преди една година, така че се страхувам, че не можем да се върнем назад.

Надявам се, че сте пропуснали запетаята и това не е умишлено. Съжалявам!

person Chirag Jhaveri    schedule 23.02.2014