mysql - (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~' 方法名是不可能得到结果的吗?如果有人可以回复,我将不胜感激。
解决方案
Spring Data JPA 确实支持查询中的所有条件和条件嵌套。我认为您的查询名称将变得不必要地冗长。它最终会成为
Table findByNum1LessThanEqualOrNum1IsNullAndNum2GreaterThanEqualOrNum2IsNull(Integer var0, Integer var1);
这应该返回适当的查询,但您需要发送变量两次,每次发送一次equals
。
@Query
您可以根据需要自由调用查询并重用相同的变量。
现在,您可以通过使用默认方法来解决使用命名方法的缺点,例如
default Table myQuery (Integer var) {
return findByNum1LessThanEqualOrNum1IsNullAndNum2GreaterThanEqualOrNum2IsNull(var, var);
}
所以你调用它而不是实际的查询,但是@Query
如果你不评论你的代码(你应该评论你的代码),使用一个适当的、描述性的甚至是自记录的名字会更干净。无论如何,我建议您将方法名称用于简单查询并@Query
用于更复杂的查询。
请参阅以下链接以进一步阅读:
LeafyJava 文章 Query Precedence Tricks,它还提供了如何更改查询逻辑的示例,以防条件未按您想要的方式排列。
推荐阅读
- scala - 如何为特定的 SIRD 路由禁用 CSRF?
- r - 返回某些数学表达式的数值向量的函数
- python - 使用 joblib 共享 pandas 数据框以进行不同的分类过程
- javascript - React 本机深度链接不在堆栈导航中导航
- reactjs - Redux-Thunk 抛出与 dispatch action type 相关的错误
- docker - Docker/Docker compose 随机停止我的容器
- android - 如何在android xml中制作加载动画
- bdd - python Bdd测试用例
- sql - 在clickhouse中使用限制前向填充缺失值
- python - 为什么我的 GAN 只产生灰色图像而没有任何进展?