MyBatis相关异常记录

本文介绍了在使用MyBatis时遇到的两个常见问题及其解决方案。一是尝试将日期类型参数与空字符串比较导致的错误,原因是MyBatis不支持这种比较,解决办法是仅判断日期参数是否为null。二是实体类缺少无参构造函数导致的查询失败,因为MyBatis依赖无参构造来构建对象。解决措施是在实体类中添加无参构造函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松树戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值