在mybatis中想直接使用逗号拼接好的字符串放入in中,不要使用#{},而要使用${}

项目楼栋楼层区域数据以树结构存储,通过父路径查找父节点。在MyBatis中,使用逗号拼接的parentPath放入IN()时遇到问题,原本在Navicat中能正常查询但在MyBatis中返回null。解决办法是避免使用#{},改用${}来处理parentPath,避免了foreach,实现了预期效果。总结:在MyBatis中,直接放入IN()的逗号拼接字符串应使用${}而不是#{ }。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目-楼栋-楼层-区域是树结构的数据,存储在一张表中,通过type类型区分;每一个层级,都保存了一个以逗号分割的parantPath --> 父路径,可以通过父路径找到该层级的所有父节点。
需求:在添加区域的时候,需要回显待添加的区域当前处于 xx项目 - xx楼栋 - xx楼层
在Navicat中,可以查询出想要的效果(还需replace):
想要的效果

问题:在mybatis中,直接将从数据库查询出来的parentPath放入in()中

问题1
在service中查询出来是null
在service中调用mapper的查询时,报空指针
解决方案
不直接使用parentPath,将parantPath逗号分割为List集合,使用foreach,结果,可以实现想要的效果。
改成forEach
这并没有找到问题的根源,最终,经过不断的使用排除法,确认是#{}的问题,若不想使用foreach,就需要使用${}接收parentPath
不使用#{}
完整sql:

select projectName location
from x_project
where projectId in (${parentPath})

总结:在mybatis中想直接使用逗号拼接好的字符串放入in中,不要使用#{},而要使用${};否则,会出现,你在Navicat中可以查询出结果,而在mybatis中查询不出结果。至于为什么用${},可以去看二者的区别。说到底,还是#{}和${}的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值