修复 MyBatis 中空值引起的 SQL 语法错误


修复 MyBatis 中空值引起的 SQL 语法错误

背景

最近在查看别人的项目代码时,遇到了一个问题:数据库中的数据为空。在调试过程中,发现问题出现在调用 MyBatis 中的方法:listByIds(Collection<? extends Serializable> idList)

报错信息

在使用该方法时,IDEA 控制台报错如下:

### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
...
SQL: SELECT id,yv,title,description,... FROM video WHERE id IN ( )
...
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

执行sql也报错:
在这里插入图片描述
定位了,是sql的问题,查询发现in内传入的参数不能为空

解决办法

  1. 使用 XML 编写动态 SQL

在 MyBatis 中,可以通过编写 XML 映射文件使用动态 SQL。使用动态 SQL 标签(如 <if>, <foreach>)来构建 SQL 查询,根据传入的参数动态生成查询条件。

示例:

<select id="getVideosByIds" parameterType="VideoQuery" resultType="Video">
    SELECT id, yv, title, description
    FROM video
    <where>
        <if test="ids != null and ids.size() > 0">
            AND id IN
            <foreach item="id" collection="ids" open="(" separator="," close=")">
                #{id}
            </foreach>
        </if>
    </where>
</select>
  1. 参数校验

在调用方法之前,对传入参数进行校验,确保传入的参数列表不为空。

if (idList != null && !idList.isEmpty()) {
    // 调用 MyBatis 方法
    videoMapper.listByIds(idList);
} else {
    // 处理参数为空的情况
    // ... 可能需要的处理逻辑
}

通过以上方式,可以避免空值引起的 SQL 语法错误,并确保在执行查询时传入了有效的参数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

redvelet

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

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

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

打赏作者

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

抵扣说明:

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

余额充值