MyBatis
一、MyBatis中不能将日期类型参数与空字符串进行比较
在update标签中使用if标签来进行动态sql拼接,引起报错的相关片段:
<if test=" listingDate!=null and listingDate!=''">
listing_date = #{listingDate},
</if>
<if test=" lastTradeDate!=null and lastTradeDate!=''">
last_trade_date = #{lastTradeDate},
</if>
<if test=" status!=null and status!=''">
status = #{status},
</if>
update_time = now()
where id = #{id}
在if标签中分别与null和空字符串进行判断,报错信息:
Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
原因:
mybatis中不能将日期类型参数与空字符串进行比较
解决措施:
将日期参数与null进行比较判断即可
<if test=" listingDate!=null">
listing_date = #{listingDate},
</if>
<if test=" lastTradeDate!=null">
last_trade_date = #{lastTradeDate},
</if>
<if test=" status!=null and status!=''">
status = #{status},
</if>
update_time = now()
where id = #{id}
</update>
二、MyBatis实体类没有无参构造函数出错
sql查询goods表中所有指定字段,报错信息如下:
首先怀疑sql出了问题,复制到
Navicat
运行,无误:
检查实体类
Goods
,发现少了无参构造,加上无参构造后正常运行:
原因:
MyBatis通过反射方式构建实体对象来封装数据库查询结构,反射Class.forName(“className”).newInstance();会用到类的无参构造函数。
避免措施:无脑给实体类加上有/无参构造、Get/Set方法…