我正在尝试使用SpringData Jpa在接口方法声明上使用@Query注释编写查询.
界面如下所示:
public interface MyService {
@Query("select * from employee e where e.projectId = ?1")
public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException;
}
Run Code Online (Sandbox Code Playgroud)
我还有一个实现此接口的类:
@Component
public class ProjectServiceImpl implements ProjectService {
}
Run Code Online (Sandbox Code Playgroud)
我不确定此查询执行将如何工作以及如何在imeplementing类中为getEmployeesWorkingOnAProject方法提供实现.
谢谢
在您的Interface中,您应该扩展 JpaRepository(或任何其他spring数据存储库).然后你可以在任何spring bean类中自动装配你的接口并调用getEmployeesWorkingOnAProject().
例如:
public interface MyService extends JpaRepository<Employee,Long> {
@Query("select * from employee e where e.projectId = ?1")
public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException;
}
@Component
public class ProjectServiceImpl implements ProjectService {
private final MyService service;
@Autowire // not necessary in spring 4.3 +
public ProjectServiceImpl(MyService service) {
this.service = service;
}
public List<Employee> getEmployeesWorkingOnAProject(String projectId) throws MyException {
return service.getEmployeesWorkingOnAProject();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Spring Data能够为您构建查询,因此在此示例中没有理由编写自己的查询.
Spring Data方式:
public interface MyService extends JpaRepository<Employee,Long> {
public List<Employee> findAllByProjectId(String projectId) throws MyException;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3924 次 |
| 最近记录: |