当我通过 JSON 获取输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date
Posted
技术标签:
【中文标题】当我通过 JSON 获取输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date【英文标题】:how to map java.util.Date to MySql Date in Ibatis when I take input through JSON 【发布时间】:2012-02-08 17:22:00 【问题描述】:我使用 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>
我有一个参数地图
<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 转换为上述格式的字符串并将其作为字符串传递。但这是一种非常糟糕的方法,客户不会喜欢它。【问题讨论】:
阅读此***.com/a/2306051/579580 【参考方案1】:使用Timestamp。考虑Joda time plug。 ...并阅读this 的答案。
这三个绝对会变魔术。
祝你好运!
【讨论】:
【参考方案2】:您是否尝试过格式化 java 日期。也许格式不同,所以 JSON 和存储在数据库中的格式不匹配?
【讨论】:
JSON 和 DB 中的格式是一样的...这个 JSON 是使用 gson 库生成的...【参考方案3】:这对我有用:
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
【讨论】:
以上是关于当我通过 JSON 获取输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date的主要内容,如果未能解决你的问题,请参考以下文章
c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?
如何从 webview 中的 json responseString 获取特定方法