java - Spring Data JPA native 查询中的变量

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

使用 Spring Dat JPA,我需要查询我的数据库并根据 startAmtendAmt 返回一系列 OrderEntity金额。我不确定我是否应该将这两个变量映射到实体 OrderEntity,作为某种类型的单独类/实体/模型中的字段,或者只是在我的 native 查询中声明它们。也许我应该使用实现 EntityManager.createNativeQuery() 的服务?

想做这样的事情:


@Repository
public interface OrderRangeRepository extends JpaRepository<OrderEntity, OrderEntityID> {

        @Query(value = "SELECT * FROM Orders WHERE Amount BETWEEN startAmt AND endAmt;" , nativeQuery=true)
    List<OrderEntity> findOrdersBy(int startAmt, int endAmt);

}

如果我要在服务中使用 EntityManager.createNativeQuery(),可能如下所示:

@Service
public class OrderRangeService {

    @Autowired
    EntityManager entityManager;

    public List<OrderEntity> findAmountsBetween() {

        List<OrderEntity> amountsBetween = entityManager.createNativeQuery("SELECT * FROM Orders WHERE Amount BETWEEN ?1 AND 2?;")
        .setParameter(1, "startAmt")
        .setParameter(2, "endAmt")
        .getResultList();

        return amountsBetween;


    }

}

最佳答案

您可以使用 Spring Data JPA 实现这一点,而无需定义 native 查询。

@Repository
public interface OrderRangeRepository extends JpaRepository<OrderEntity, OrderEntityID> {
    List<OrderEntity> findByAmountBetween(int startAmt, int endAmt);
}

如果您想使用 native 查询,请将其更改为

 @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;
    }

}

最后,您应该从您的 Controller Autowiring 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();
}

关于java - Spring Data JPA native 查询中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453768/

相关文章:

java - Firestore Document 不维护 LinkedHashMap 中键的顺序

java - 写入文件java

mysql - 如何在mysql中查找 friend 的 friend

SQL SERVER - 月份的排名/行数

java - 可以从 eclipse 运行 spring boot 应用程序,但不能从终端运行

java - 在 EAR 中的多个 war 中共享公共(public) jsp

java - DateFormatSymbols 给出了错误的月/日翻译

php - 不显示来自mysql的数据

java - 如何转换复杂对象列表并将其表示在值 yaml 图表中

java - 如何在 spring-boot 中禁用 spring-data-mongodb 自动配置