You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级MyBatis Kotlin Dynamic SQL至1.5.0时isIn用法报错求助

MyBatis Kotlin Dynamic SQL 升级问题排查与解决

问题原因分析

  1. 旧代码编译失败:
    新版本的MyBatis Kotlin Dynamic SQL重构了isIn的API签名,不再支持通过*操作符直接展开列表作为参数的写法,旧API已被移除,导致编译不通过。

  2. 新代码运行报错:
    你写的facility isIn { searchData.selectedFacilities }中,花括号会被框架解析为子查询构建器,而非直接传入列表参数,框架因此要求你在子查询中定义select语句,从而抛出You must specify a select statement in a sub query错误。

解决方法

基础正确写法

直接将Int列表作为参数传入isIn,不要添加花括号:

val fencingForFacilities: List<Fencing> = fencingSupportMapper.select {
    where { facility isIn searchData.selectedFacilities!! }
}

空安全优化写法

考虑到searchData.selectedFacilities可能为空,建议增加空判断避免空指针或生成无效SQL:

val selectedFacilities = searchData.selectedFacilities ?: emptyList()
val fencingForFacilities: List<Fencing> = fencingSupportMapper.select {
    where { 
        if (selectedFacilities.isNotEmpty()) {
            facility isIn selectedFacilities
        } else {
            // 根据业务需求设置默认条件,比如匹配所有或过滤无效数据
            facility isNotNull
        }
    }
}

内容的提问来源于stack exchange,提问作者mikeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:02