今天遇到一个奇葩的问题,更新操作的时候一直报数据类型转换错误;懵逼。。。。
Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
- mybatis-plus 的版本是 3.1的
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
select 就算了不说了 这里直说update 最一开始XML是这样写的:
1.前提是对象中的属性是Date 类型的 :
//上次登录时间
private Date lastLoginTime;
//切出时间
private Date cutOutTime;
2.然后传递的参数也是Date 类型的:
umeng.setCutOutTime(new Date())
3.umeng.xml 中是这样写的:
update umeng
<set>
<if test="userId != null and userId != ''">
user_id = #{userId}
</if>
<if test="deviceToken != null and deviceToken != ''">
, device_token = #{deviceToken}
</if>
<if test="online != null and online != ''">
, online = #{online}
</if>
<if test="orgId != null and orgId != ''">
, org_id = #{orgId}
</if>
<if test="platform != null and platform != ''">
, platform = #{platform}
</if>
<if test="umToken != null and umToken != ''">
, um_token = #{umToken}
</if>
<if test="lastLoginTime != null and lastLoginTime != ''">
, last_login_time = #{lastLoginTime}
</if>
<if test="cutOutTime != null and cutOutTime != ''">
,cut_out_time = #{cutOutTime}
</if>
WHERE
id = #{id}
</set>
后来百度查了一圈
1.判断的时候不能判断为空字符串 所以就把xml中改了
<if test="lastLoginTime != null ">
, last_login_time = #{lastLoginTime}
</if>
<if test="cutOutTime != null ">
,cut_out_time = #{cutOutTime}
</if>
依旧有问题
cut_out_time = to_date(#{cutOutTime,jdbcType=DATE},'yyyy-mm-dd') 这个针对实体是String 类型的
随即改成这样的就好了
,cut_out_time= date(#{cutOutTime,jdbcType=TIMESTAMP})
但是date 限制住只能是年月日 时分秒获取不到 所以又把 date 去掉
,cut_out_time = #{cutOutTime,jdbcType=TIMESTAMP}
这里的jdbcType=TIMESTAMP 和 ,jdbcType=DATE 是有区别的
当jdbcType="DATE"类型时,返回的时间只有年月日(yyyy-MM-dd)的,当jdbcType=“TIMESTAMP”的时候,返回的时间是年月日和时分秒(yyyy-MM-dd HH:mm:ss)