Spring数据具有其自己的注释“查询”,该注释将SQL查询与Java关联。它通常在存储库中的每种方法中使用一个查询。

我的问题:spring数据是否可以编写一次查询并将其乘以多次?

例如,替换此代码

@Repository
public interface StuffRepository extends JpaRepository<Stuff, Integer>, JpaSpecificationExecutor<Stuff> {


    @Query(value = "SELECT s "
        + "FROM Stuff s "
        + "JOIN s.foo f"
        + "WHERE f.id = :id")
    Page<Stuff> findByFooId(@Param("id") String id,  Pageable pageable);

    @Query(value = "SELECT s "
        + "FROM Stuff s "
        + "JOIN s.foo f"
        + "WHERE f.id = :id")
    List<Stuff> findByFooId(@Param("id") String id);

    @Query(value = "SELECT s "
        + "FROM Stuff s "
        + "JOIN s.foo f"
        + "WHERE f.id = :id")
    Stuff findByFooIdFirst(@Param("id") String id);
}


像这样

@Repository
public interface StuffRepository extends JpaRepository<Stuff, Integer>, JpaSpecificationExecutor<Stuff> {


    @Query(value = "SELECT s "     //create query findByFooId
        + "FROM Stuff s "
        + "JOIN s.foo f"
        + "WHERE f.id = :id",
        name = "findByFooId"
    )
    Page<Stuff> findByFooId(@Param("id") String id,  Pageable pageable);

    @Query(name = "findByFooId")   // link to query
    List<Stuff> findByFooId(@Param("id") String id);



    @Query(name = "findByFooId")   //link to query
    Stuff findByFooIdFirst(@Param("id") String id);
}

最佳答案

只需使用静态字符串进行查询即可

@Repository
public interface StuffRepository extends JpaRepository<Stuff, Integer>, JpaSpecificationExecutor<Stuff> {


String QUERY = "SELECT s "
    + "FROM Stuff s "
    + "JOIN s.foo f"
    + "WHERE f.id = :id";

@Query(value = QUERY)
List<Stuff> findByFooId(@Param("id") String id);


@Query(value= QUERY)
Page<Stuff> findByFooId(@Param("id") String id,  Pageable pageable);

09-05 21:20