在Spring Data JPA存储库

时间:2017-04-03 16:58:05

标签: java spring spring-boot spring-data-jpa

我正在使用spring-boot-project并使用 JpaRepository 接口。 根据{{​​3}},可以编写自定义实现。

这是一个显示我想要做的事情的例子。

我有一个简单的类客户端

@Entity
public class Client {
  @Id
  Long id;
  @Column
  String name;
  @Column
  Date since;

  // ... methods omitted 
}

ClientRepository

public interface ClientRepository extends JpaRepository<Client, Long>, ClientRepositoryCustom {
  List<Client> findBySinceBetween(Date start, Date end);
}

ClientRepositoryCustom

public interface ClientRepositoryCustom {
  List<Client> getClientsSinceYear(int year);
}

最后是 ClientRepositoryImpl

@Repository
public class ClientRepositoryImpl implements ClientRepositoryCustom {
  @Overwrite
  List<Client> getClientsSinceYear(int year) {
    // ... implementation details
  }
}

我想要一个像getClientsSinceYear(int year)这样的查询。

我知道我可以像这样findBySinceBetween(Date start, Date end)编写这个查询,然后传递一年中的第一天和最后一天。但是我想只将一个参数传递给函数。

在选择姓名时,我有哪些自由度? 这甚至可能吗? 是否有一个触发词,如果我想要一个与我的实体的属性有关的名字,我必须使用它?

如果我查询例如两个属性。 似乎我可以编写像findByName(String name, int year)这样的方法,但我宁愿没有一个带有与方法名称无关的附加参数的方法。

提前致谢,我们非常感谢您的反馈!

1 个答案:

答案 0 :(得分:4)

您可以使用@Query

编写自定义查询

Spring Documentation

对于Microsoft SQL Server,您可以编写例如

@Query("select * from client_table where year(yourColumn) = ?1")
Client findClientCreatedInYear(int year);

您将在互联网上找到与其他dbms类似的SQL查询。