[英]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獲取請求參數時才會出現問題。
這對我有用:
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.