1. 程式人生 > >mybatis異常invalid comparison: java.util.Date and java.lang.String

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

sde mce public void 3.0 product 日期字段 oid lan

在屬性中定義了日期字段

@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>
 

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