как сопоставить java.util.Date для MySql Дата в Ibatis, когда я принимаю ввод через JSON - PullRequest
3 голосов
/ 12 января 2012

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

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

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

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 как ноль в JSON, тогда я получаю результат.

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

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

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

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

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Использование Метка времени .Рассмотрим Joda Time Plug .... и прочитайте этот ответ.

Эти трое будут творить чудеса.

Удачи!

0 голосов
/ 01 февраля 2013

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

Тип атрибута 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

0 голосов
/ 12 января 2012

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

...