簡體   English   中英

當我通過JSON獲取輸入時,如何將java.util.Date映射到Ibatis中的MySql Date

[英]how to map java.util.Date to MySql Date in Ibatis when I take input through 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數據庫中的person表。 我在查詢數據庫,如:

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>

我有一個參數Map

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

我無法從數據庫中獲得任何結果。即使值存在,它也不會選擇任何行。我已經檢查過其他任何驗證檢查都沒有失敗。 如果我在JSON中將dateOfBirth傳遞為null,那么我得到結果。

我還寫了一個測試用例和設置請求如下:

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

當我從上面提到的測試用例傳遞值時,我從數據庫得到結果。 只有當我使用json獲取請求參數時才會出現問題。

  • JSOn的格式和存儲在DB中的格式相同
  • 我的一個工作是手動將java.util.Date轉換為上述格式的String並將其作為字符串傳遞。 但這是非常糟糕的方法,客戶不喜歡它。

使用時間戳 考慮Joda時間插件 ......並閱讀這個答案。

這三個絕對是神奇的。

祝好運!

這對我有用:

mysql屬性類型是Timestamp ,我在Java中格式化JSON的日期,如下所示:

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

你試過格式化java日期嗎? 也許格式不同,所以JSON和數據庫中存儲的格式不一致?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM