项目-楼栋-楼层-区域是树结构的数据,存储在一张表中,通过type类型区分;每一个层级,都保存了一个以逗号分割的parantPath --> 父路径,可以通过父路径找到该层级的所有父节点。
需求:在添加区域的时候,需要回显待添加的区域当前处于 xx项目 - xx楼栋 - xx楼层
在Navicat中,可以查询出想要的效果(还需replace):
问题:在mybatis中,直接将从数据库查询出来的parentPath放入in()中
在service中查询出来是null
解决方案:
不直接使用parentPath,将parantPath逗号分割为List集合,使用foreach,结果,可以实现想要的效果。
这并没有找到问题的根源,最终,经过不断的使用排除法,确认是#{}的问题,若不想使用foreach,就需要使用${}接收parentPath
完整sql:
select projectName location
from x_project
where projectId in (${parentPath})
总结:在mybatis中想直接使用逗号拼接好的字符串放入in中,不要使用#{},而要使用${};否则,会出现,你在Navicat中可以查询出结果,而在mybatis中查询不出结果。至于为什么用${},可以去看二者的区别。说到底,还是#{}和${}的问题。