为什么isIn条件在MyBatis中不起作用

问题描述 投票:1回答:1

我写了两个选择语句,第一个产生了一个ID列表,在第二个中,我希望选择IDList中具有ID的视频。我打印了idList并确保它为empty,但是下面的select语句返回表中的所有视频

SelectStatementProvider selectStatementProvider = selectDistinct(
        VideoHitDynamicSqlSupport.videoId
)
        .from(VideoHitDynamicSqlSupport.videoHit)
        .where(VideoHitDynamicSqlSupport.hitterId, isEqualTo(uid))
        .build()
        .render(RenderingStrategies.MYBATIS3);

List<VideoHit> videoHits = this.videoHitMapper.selectMany(selectStatementProvider);
ArrayList<Integer> idList = new ArrayList<>();
videoHits.forEach(e -> idList.add(e.getVideoId()));

List<Video> videos = this.videoMapper.select(c -> c
        .where(VideoDynamicSqlSupport.videoId, isIn(idList))
);

return videos;
java spring-boot mybatis dynamic-sql mybatis-generator
1个回答
0
投票

这是预期的行为。如果返回的ID列表为空,则IsIn条件将不会呈现。

您必须考虑实际的SQL是什么。如果满足条件,则生成的SQL将如下所示:

select * from video where videoId in ()

这是无效的SQL。该库不会呈现无效的SQL,在这种情况下,这意味着不会呈现where子句-因此将返回所有行。

© www.soinside.com 2019 - 2024. All rights reserved.