![](/img/trans.png)
[英]transactionTemplate doesn't work with mybatis but I don't know why
[英]Why the isIn condition doesn't work in MyBatis
我写了两个select语句,第一个生成了一个id列表,在第二个中我希望idList内有id的视频会被选中。 我打印了 idList 并确保它为空,但下面的 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;
这是预期的行为。 如果返回的 ID 列表为空,则不会呈现 IsIn 条件。
您必须考虑实际的 SQL 是什么。 如果条件呈现,则生成的 SQL 将如下所示:
select * from video where videoId in ()
这是无效的 SQL。 该库不会呈现无效的 SQL,在这种情况下,这意味着不会呈现任何where
子句 - 因此返回所有行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.