mybites_plus 中 date 的问题

廉价感情. 提交于 2019-11-30 14:56:54

今天遇到一个奇葩的问题,更新操作的时候一直报数据类型转换错误;懵逼。。。。

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)

 

 

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!