mybatis list foreach 为 null

mybatis list foreach is null

提问人:senz 提问时间:9/25/2023 最后编辑:senz 更新时间:9/25/2023 访问量:77

问:

在执行 sql 之前,我已经在 java 代码中确定列表不为空,但偶尔会有 sql 是错误的。

有时生产 sql 是

select name from user where id in

Service.java ObjectUtils 是 org.apache.commons.lang3.ObjectUtils

我知道不能直接在parallelStream中添加,应该使用Collectors.toSet。

我想知道的是,这个错误sql与list.parallelStream有关

public List<String> queryByIds() {
    Set<Long> ids = new HashSet<>();
    list.parallelStream().forEach(obj -> {
       ids.add(obj.id)
    }

    if (ObjectUtils.isEmpty(ids)){
        return Collections.emptyList();
    }
    return mapper.queryByIds(ids);
}

mapper.java

List<String> queryByIds(@Param("list") Set<Long> ids);

mapper.xml

<select id="queryByIds" resultType="java.lang.String">
    select name from user where id in
    <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>
Java SQL Spring MyBatis

评论

0赞 The Impaler 9/25/2023
现在,当列表为空时,您想做什么?返回整个表,根本没有行,还有别的吗?一个简单的可以产生你想要的行为。<if test="list.size == 0">
0赞 senz 9/26/2023
@TheImpaler我知道这个解决方案,但是现在我想知道,为什么会出现错误sql,因为我已经在java代码中判断了空。
0赞 senz 9/26/2023
@TheImpaler我知道答案,因为parallelStream使大小与集合的实际长度不同。
0赞 The Impaler 9/26/2023
我不明白你的问题。你说“......有时生产 sql 是......“;好吧,这不是一个有效的 SQL 语句,会让你的应用程序崩溃。你需要什么?

答: 暂无答案