我不了解春季的查询工作方式。到目前为止,我有此查询,我想在其中基于字符串参数从表中检索值。但是从我的研究来看,为了实现查询注释,我应该将查询注释放在函数之上。但是当尚未实现该子例程时,如何从该子例程中检索该值呢?
我从这里开始
@Repository
public interface PhoneRepository {
@Query("SELECT price FROM phone WHERE model = ?1 AND storage = ?2 AND quality = ?3")
public double devicePrice(String model, String storage, String quality);
}
我应该如何从这里从表中获取价格值?
public class PhoneImplementation implements PhoneRepository{
public double devicePrice(String model, String storage, String quality) {
// return the price value here somehow
}
}
答案 0 :(得分:0)
您不需要实现@Repository PhoneRepository。只需使用@Autowired调用控制器或服务上的PhoneRepository,然后使用devicePrice(字符串模型,字符串存储,字符串质量)即可。
我们服务中的示例:
@Autowired
private PhoneRepository phoneRepository;
public double yourMethod(String model, String storage, String quality) {
return this.phoneRepository.devicePrice(String model, String storage, String quality);
}
答案 1 :(得分:0)
@Transactional
@Query(value="SELECT price FROM phone WHERE model = ?1 AND storage = ?2 AND quality = ?3",nativeQuery=true)
public double devicePrice(String model, String storage, String quality);
在使用Spring Boot时,您可以使用JpaRepository<T, ID>
扩展存储库,如下所示
public interface PhoneRepository extends JpaRepository<Phone, ID>
这里电话是您的实体,ID是您实体中主键的一种。 Jpa使编写自定义查询变得容易,而无需在存储库中编写。
JpaRepository已经具有以下方法
List<T> findAll();
List<T> findAll(Sort sort);
List<T> findAllById(Iterable<ID> ids);
<S extends T> List<S> saveAll(Iterable<S> entities);
<S extends T> S saveAndFlush(S entity);
void deleteAllInBatch();
<S extends T> List<S> findAll(Example<S> example);
即使您可以根据参考字段来编写查询。
.findByLastnameAndFirstname (… where x.lastname = ?1 and x.firstname = ?2)