Querydsl喜欢惊喜

Posted

技术标签:

【中文标题】Querydsl喜欢惊喜【英文标题】:Querydsl Like Surprise 【发布时间】:2017-07-22 14:17:51 【问题描述】:

我刚刚涉足使用 Querydsl,并且非常享受它为与 JPA 交互带来的改进。

我还有一个问题是为什么你必须用% 包装like 参数?

我是否配置不当?考虑到starts/endsWith 有一个方法,我假设like(str) 会自动包装我的str

但令我惊讶的是,我需要这样做:"%" + str + "%" 才能得到我所期望的。

这是为什么呢?有没有更好的办法?

【问题讨论】:

一个随机的问题是它如何知道是否使用“%”作为前缀和后缀或仅使用后缀:或者仅使用前缀。 '%a%' 'a%' 和 '%a' 是不同的查询吗? QueryDSL StringPath 类具有 containscontainsIgnoreCase 方法,可以自动添加和附加 % 符号。 根据this contains 做了很多不同的事情。这不是正确的阅读方式吗? 【参考方案1】:

是的,有。 (至少在 QueryDSL 4.1.3 中),有一个 contains(String s) 方法及其变体(包含 IgnoreCase 等)。这就是你要找的。​​p>

【讨论】:

【参考方案2】:

Like 可以进行自定义通配符匹配(该算法希望您自己添加 % 字符以及您认为需要它们的任何位置)。

除了 StartsWith / EndsWith 具有隐含的 % 字符之外。还有 包含 关键字,它预先和附加了 % 字符。这就是您要在这里寻找的东西。

findByAttributeContaining(String charset);

文档示例:spring jpa examples

【讨论】:

我没有看到 findByAttributeContaining 我确实看到了 contains 操作,但基于 this 我虽然这与开头和结尾完全不同 检查我添加的示例.. 它清楚地指出:参数绑定在 % 中。我的示例中的 Attribute 可以是您想要与字符集匹配的 eny 属性 这个答案似乎是在谈论 Spring Data 派生查询,而不是原始问题的主题 QueryDsl。

以上是关于Querydsl喜欢惊喜的主要内容,如果未能解决你的问题,请参考以下文章

QueryDSL 4 与 RowNumber Window 功能

SpringBoot12 QueryDSL02之利用QueryDSL实现多表关联查询

QueryDSL 的最新状态是啥?

如何使用 Querydsl 更新 JPA 实体?

如何连接多个 queryDSL 表

Querydsl.JPQLQuery 获取记录数