Querydsl Like Surprise

7
我刚接触Querydsl,非常喜欢它为与JPA交互带来的改进。
我还有一个问题:为什么必须用%包装like参数?
我是否配置不当?考虑到有starts/endsWith方法,我认为like(str)会自动包装我的str
但是令我惊讶的是,我需要这样做:"%" + str + "%"才能得到我期望的结果。
为什么?有更好的方法吗?

一个随机的想法是它如何知道是否要在前缀和后缀加上“%”,或者只是在后缀加上,或者仅在前缀加上。'%a%'、'a%'和'%a'是不同的查询吗? - Alan Hay
3
QueryDSL 的 StringPath 类有 containscontainsIgnoreCase 方法,会自动在字符串前后添加 % 符号。 - manish
根据这里的内容,contains函数可以执行许多不同的操作。这不是正确的阅读吗? - TheNorthWes
2个回答

9

是的,有这个方法。(至少在QueryDSL 4.1.3中) 存在一个contains(String s)方法及其变体(containsIgnoreCase 等)。这才是你要找的东西。


2

Like 用于进行自定义通配符匹配(算法期望您自己添加 % 字符并在需要的位置添加)。

除了具有隐含 % 字符的 StartsWith / EndsWith 之外,还有一个包含关键字,它会在前缀和后缀添加 % 字符。这正是您在此处寻找的。

findByAttributeContaining(String charset);

文档示例:Spring JPA 示例


我没有看到 findByAttributeContaining,但我看到了包含操作。但根据这个 ,我认为它与以...开始和以...结束是根本不同的。 - TheNorthWes
请检查我添加的示例...它明确说明:以%包装的参数绑定。在我的示例中,Attribute可以是任何您想要匹配到字符集的属性。 - Maciej Kowalski
这个答案似乎在谈论Spring Data派生查询,而不是原始问题的主题QueryDsl。 - Alan Hay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接