java - "SELECT... WHERE column > ?1"- 那是什么?

标签 java sql spring spring-data-jpa

我是 Spring 新手,快速学习了几天,需要修复工作场所中的旧服务。

我有一个 JPA 存储库,其中一些带有 @Query 的方法包含这个奇怪的 > ?1

看起来像这样:

@Repository
public interface LeadsRepository extends JpaRepository<LeadEntity, Long> 
{

    @Query(value = "select /*long query*/ where p.acceptedAt > ?1 and 
          p.acceptedAt < ?2", nativeQuery = true)
    Stream<LeadEntity> findPendingPackages(date begin, date end);
}

这是什么意思?它怎么可能同时选择 >1 和 <2 ?那么它应该不选择任何内容...

P.S - 我也是一个 SQL 新手,所以对我要轻松一点:)

最佳答案

@Query(value = "select /*long query*/ where p.acceptedAt > ?1 and 
          p.acceptedAt < ?2", nativeQuery = true)
Stream<LeadEntity> findPendingPackages(date begin, date end);

这意味着 ?1引用方法的第一个参数 => date begin

?2引用第二个参数 date end等等...

所以findPendingPackages应该返回其 acceptedAt 的所有包日期介于 date begin 之间和date end

因此您可以使用 ? 传递 SQl 参数,并且您必须尊重方法中的数量和顺序

参见here in doc欲了解更多信息

您还可以使用命名参数,例如 :paramname如果您有很多参数要发送,以防止排序错误或数字,例如您的查询将是

@Query(value = "select /*long query*/ where p.acceptedAt > :begin and 
          p.acceptedAt < :end", nativeQuery = true)
Stream<LeadEntity> findPendingPackages(@Param("begin") date begin,@Param("end") date end);

关于java - "SELECT... WHERE column > ?1"- 那是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594646/

相关文章:

java - 如何处理 Spring 中已发布事件的异常

java - AspectJ - 将接口(interface)实例变量传递给切入点

java - Spring MVC Web应用程序中如何拦截所有异常以及如何存储大量信息?

java - 使用 JSF 时等效的 Spring 自定义 Collection 属性编辑器

Moodle 上类(class)注册的 SQL 查询

php - 根据选择更新表,可能使用锁定?

java - Spring Hateoas/HAL 抛出异常

java - 来自守护进程的错误响应 :request canceled while waiting for connection (Client. 等待 header 时超时)

java - android uiautomator runtest 错误没有找到类

mysql - 等待 MySQL 表上的表级锁定