Panache中LIKE操作返回空列表问题咨询
Panache框架LIKE查询返回空列表的问题解决
Panache完全支持LIKE操作,你的问题出在查询语句中字符串拼接的方式不符合Panache的参数绑定逻辑。
问题分析
你当前的查询语句中使用'%' || :uuid || '%'来拼接通配符和参数,但Panache的参数绑定机制无法正确解析这种写法,导致LIKE条件没有生效。而你提到的两种正常情况:
- 当
uuid设为null时,:uuid IS NULL条件触发,返回所有数据 - 当
uuid改为123时,GUUID = :uuid条件触发,匹配到对应行
这说明前两个条件逻辑正常,问题仅出在LIKE语句的参数处理上。
解决方案
推荐将通配符直接附加到参数值中,而非在查询语句里拼接,这种方式更符合Panache的参数绑定规范,同时也能避免SQL注入风险:
val targetUuid = "092ed247-887e-4ffe-8b9e-876c307c038" val paramsMap = Parameters() paramsMap.and("uuid", targetUuid) // 将通配符直接加到参数值里 paramsMap.and("uuidLike", "%$targetUuid%") // 调整查询语句,使用新的参数名 val panacheQuery = find(":uuid IS NULL OR GUUID = :uuid OR GUUID LIKE :uuidLike", paramsMap) val en = panacheQuery.list<MldEntity>() println(en)
补充说明
如果你坚持要在查询语句中拼接字符串,需要确认你使用的数据库对应的字符串拼接语法(比如MySQL用CONCAT('%', :uuid, '%'),PostgreSQL用'%' || :uuid || '%'),但即使语法正确,Panache的参数绑定仍可能无法正确处理这种嵌套拼接,因此优先推荐上述将通配符放入参数值的方案。
内容的提问来源于stack exchange,提问作者perpetter
相关产品推荐
相关产品推荐

