как сопоставить java.util.Date с датой MySql в Ibatis, когда я ввожу ввод через JSON

Я беру дату рождения в качестве входных данных, используя JSON

{"dateOfBirth":"1973-08-26"}

Это поле существует в классе Person.java

import java.util.Date;

public class Person {

    Date dateOfBirth;

    //Some other fields

    public void setDateOfBirth(Date dateOfBirth) {

         this.dateOfBirth = dateOfBirth;
       }

   public Date getDateOfBirth() {

        return dateOfBirth;
       }
   }

Это сопоставлено с таблицей лиц в базе данных mysql. Я запрашиваю базу данных, например:

entityId = (Long) session.selectOne("ValidatePerson", registerUserRequestParams);

Ниже приведены записи, которые я делаю в своем mapper.xml.

<select id="ValidatePerson" parameterMap="ValidatePersonMap" resultType="long">
    select person.entityId
    from person
    where 
                //Some other Validation checks
        <if test="dateOfBirth != null">
        and person.dateOfBirth = #{dateOfBirth}
         </if>
        );
</select>

У меня есть карта параметров как

<parameterMap id="ValidatePersonMap" type="java.util.HashMap">
     <parameter property="dateOfBirth" javaType="java.util.Date" jdbcType="DATE"  mode="IN"/>
</parameterMap>

Я не могу получить какой-либо результат из базы данных. Он не выбирает какую-либо строку, даже если значение существует. Я проверил, что ни одна из других проверок не завершается ошибкой. Если я передам dateOfBirth как null в JSON, тогда я получу результат.

Я также написал тестовый пример и запрос настройки следующим образом:

Date dob = new Date(73,7,26);
request.setDateOfBirth(dob);

Когда я передаю значения из тестового примера, как указано выше, я получаю результат из базы данных. Проблема возникает только тогда, когда я получаю параметры запроса с помощью json.

  • Формат JSOn и формат, хранящийся в БД, совпадают.
  • У меня есть один обходной путь: вручную преобразовать java.util.Date в String в указанном выше формате и передать его как строку. Но это довольно плохой подход, и клиенту это не понравится.

person Aneesh Garg    schedule 12.01.2012    source источник
comment
прочитайте это stackoverflow.com/a/2306051/579580   -  person aviad    schedule 09.02.2012


Ответы (3)


Используйте Timestamp. Обратите внимание на временную вставку Joda. ... и прочитайте этот ответ.

Эти трое точно сделают волшебство.

Удачи!

person aviad    schedule 09.02.2012

Вы пытались форматировать дату java. Может быть, форматы разные, поэтому он не может совпадать между JSON и тем, который хранится в вашей базе данных?

person thai_pham    schedule 12.01.2012
comment
форматы одинаковы в JSON и DB... этот JSON создается с использованием библиотеки gson... - person Aneesh Garg; 13.01.2012

Это сработало для меня:

Тип атрибута mysql — Timestamp, и я форматирую дату для JSON в Java следующим образом:

Date d = new Date();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
String sd = sdf.format(d);
java.text.SimpleDateFormat sdf2 = new java.text.SimpleDateFormat("HH:MM:ss");
String fakeit =sd+"T"+sdf2.format(d);

Затем я использую fakeit

person GeegeeK    schedule 01.02.2013