java - 当我通过 JSON 输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date

标签 java mysql json ibatis mybatis

我使用 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 转换为上述格式的字符串并将其作为字符串传递。但这是非常糟糕的方法,客户不会喜欢它。

最佳答案

使用Timestamp .考虑 Joda time plug . ...并阅读 this回答。

这三个绝对会施展魔法。

祝你好运!

关于java - 当我通过 JSON 输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834767/

相关文章:

java - Java 中的 LDAP 事务

mysql - 大索引(MYSQL)的插入性能下降

javascript - 解析JSON数据渲染 Highcharts

java - 是否可以通过Hashmap制裁剪品(武器/盔甲)的装备(键是 body 的一部分,值是盔甲或武器(如果是手)

java - Pubnub 中的 here_now(String args0) 是做什么的?

mysql - 在 Mysql 中,如何使用性能模式查找哪些查询导致 cpu% 增加了多少?

json - 使用 AWS S3-select 获取 json 文件中对象计数的 SQL 表达式

java - 无法从 START_OBJECT token 中反序列化 <DataModel> 的实例

java - 尝试从 Unity 4.6 中的 Java 插件设置纹理

mysql - "SELECT EXISTS"给出不正确的结果,在重置连接时更正