mybatis异常invalid comparison: java.util.Date and java.lang.String

本文介绍了一个在使用MyBatis 3.3.0版本处理日期参数时遇到的bug,并提供了解决方案。当将传入的时间类型参数与空字符串进行比较时会导致异常,文章给出了正确的条件判断方式。

在属性中定义了日期字段

@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")//将返回的时间转换为日期格式
@DateTimeFormat(pattern = "yyyy-MM-dd")//将日期格式的转换为时间
private Date productionDate;//生产日期

public Date getProductionDate() {
return productionDate;
}

public void setProductionDate(Date productionDate) {
this.productionDate = productionDate;
}

<select id="queryRecordByGoodsId" resultType="com.jxc.model.StockBrandGoodsDemo">
SELECT demo.demo_id AS demoId,demo.brand_id AS brandId,demo.brand_name AS brandName,demo.goods_id AS goodsId,
demo.goods_name AS goodsName,demo.pick_number AS pickNumber,demo.retail_price AS retailPrice
FROM brand_goods_demo demo
WHERE demo.store_id = #{storeId} AND demo.goods_id = #{goodsId}

<if test="productionDate != null and productionDate != ''">//代码运行到这里就报错了
        and DATE_FORMAT(demo.production_date,'%y-%M-%d') = DATE_FORMAT(#{productionDate,jdbcType=TIMESTAMP},'%y-%M-%d')
</if>
</select>


原工程中配置的是mybatis-3.2.8, 而我测试工程中用的是mybatis-3.3.0.后来在网上找了一下才知道, 原来这是mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了

就是把字段判空字符串删除就行了
<if test="productionDate != null">//就像这样
        and DATE_FORMAT(demo.production_date,'%y-%M-%d') = DATE_FORMAT(#{productionDate,jdbcType=TIMESTAMP},'%y-%M-%d')
</if>
 

转载于:https://www.cnblogs.com/JerryTomcat/p/9059908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值