我正在使用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)
这样的方法,但我宁愿没有一个带有与方法名称无关的附加参数的方法。
提前致谢,我们非常感谢您的反馈!
答案 0 :(得分:4)
您可以使用@Query
编写自定义查询对于Microsoft SQL Server,您可以编写例如
@Query("select * from client_table where year(yourColumn) = ?1")
Client findClientCreatedInYear(int year);
您将在互联网上找到与其他dbms类似的SQL查询。