“ SELECT ... WHERE列>?1”-那是什么?

时间:2019-08-21 15:12:47

标签: java sql spring spring-data-jpa

我刚到春天,很快就学习了几天,并且需要在工作场所修复旧服务。

我有一个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新手,所以对我容易:)

1 个答案:

答案 0 :(得分:3)

@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应该返回其日期acceptedAtdate begindate 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);