首页 > 解决方案 > (Spring JPA) 方法名查询

问题描述

首先,对不起我糟糕的英语。

我想将以下查询更改为“findBy~”方法,但我不知道该怎么做。

@Query(value = " SELECT t FROM Table t WHERE (b.num1 <= :variable or b.num1 IS NULL) AND (b.num2 >= :variable or b.num2 IS NULL) ")

或者,使用 'findby~' 方法名是不可能得到结果的吗?如果有人可以回复,我将不胜感激。

标签: mysqljpa

解决方案


Spring Data JPA 确实支持查询中的所有条件和条件嵌套。我认为您的查询名称将变得不必要地冗长。它最终会成为

Table findByNum1LessThanEqualOrNum1IsNullAndNum2GreaterThanEqualOrNum2IsNull(Integer var0, Integer var1);

这应该返回适​​当的查询,但您需要发送变量两次,每次发送一次equals

@Query您可以根据需要自由调用查询并重用相同的变量。

现在,您可以通过使用默认方法来解决使用命名方法的缺点,例如

default Table myQuery (Integer var) {
    return findByNum1LessThanEqualOrNum1IsNullAndNum2GreaterThanEqualOrNum2IsNull(var, var);
}

所以你调用它而不是实际的查询,但是@Query如果你不评论你的代码(你应该评论你的代码),使用一个适当的、描述性的甚至是自记录的名字会更干净。无论如何,我建议您将方法名称用于简单查询并@Query用于更复杂的查询。

请参阅以下链接以进一步阅读:

Spring JPA 查询创建

Spring JPA 查询关键字存储库

LeafyJava 文章 Query Precedence Tricks,它还提供了如何更改查询逻辑的示例,以防条件未按您想要的方式排列。

这个 SO question 也提供了一些见解。


推荐阅读