2 回答
TA贡献1828条经验 获得超6个赞
您可以使用 Spring Data JPA 来实现此目的,而无需定义本机查询。
@Repository
public interface OrderRangeRepository extends JpaRepository<OrderEntity, OrderEntityID> {
List<OrderEntity> findByAmountBetween(int startAmt, int endAmt);
}
如果您想使用本机查询,请将其更改为
@Query(value = "SELECT * FROM Orders WHERE Amount BETWEEN :startAmt AND :endAmt" , nativeQuery=true)
List<OrderEntity> findOrdersBy(@Param("startAmt") int startAmt, @Param("endAmt") int endAmt);
您可以通过执行以下操作来调用服务中的查询
@Service
public class OrderRangeService {
@Autowired
OrderRangeRepository orderRangeRepository ;
public List<OrderEntity> findAmountsBetween(int startAmt, int endAmt) {
List<OrderEntity> amountsBetween = orderRangeRepository.findByAmountBetween(startAmt, endAmt);
return amountsBetween;
}
}
最后,从您的控制器中,您应该自动装配 OrderRangeService 并调用 findAmountsBetween 服务方法
@Autowired
OrderRangeService orderRangeService;
@GetMapping("/amountsFromAndTo")
@ResponseBody
public String getAmounts(@RequestParam int startAmt, @RequestParam int endAmt) {
List<OrderEntity> orderEntityL = orderRangeService.findAmountsBetween(startAmt, endAmt);
return orderEntityL.toString();
}
TA贡献2016条经验 获得超9个赞
1. 命名参数
每个用 @Param 注释的参数必须具有与相应的 JPQL 或 SQL 查询参数名称匹配的值字符串。具有命名参数的查询更易于阅读,并且在需要重构查询时更不易出错。
@Query(value = "SELECT * FROM Orders WHERE Amount BETWEEN :startAmt AND :endAmt;" , nativeQuery=true) List<OrderEntity> findOrdersBy(@Param("startAmt") int startAmt, @Param("endAmt") int endAmt); }
2. 索引查询参数
Spring Data 将按照方法参数在方法声明中出现的顺序将方法参数传递给查询
@Query(value = "SELECT * FROM Orders WHERE Amount BETWEEN ?1 AND ?2;" , nativeQuery=true)List<OrderEntity> findOrdersBy(int startAmt, int endAmt);
添加回答
举报