Spring Data JPA 本机查询中的变量

编程入门 行业动态 更新时间:2024-10-28 20:27:50
本文介绍了Spring Data JPA 本机查询中的变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

想做类似的事情:

@Repository公共接口 OrderRangeRepository 扩展 JpaRepository{@Query(value = "SELECT * FROM Orders WHERE Amount BETWEEN startAmt AND endAmt;" , nativeQuery=true)列表<OrderEntity>findOrdersBy(int startAmt, int endAmt);}

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

@Service公共类 OrderRangeService {@自动连线EntityManager 实体管理器;公共列表<OrderEntity>findAmountsBetween() {列表<OrderEntity>amountBetween = entityManager.createNativeQuery("SELECT * FROM Orders WHERE Amount BETWEEN ?1 AND 2?;").setParameter(1, "startAmt").setParameter(2, "endAmt").getResultList();退货金额之间;}}

解决方案

您可以使用 Spring Data JPA 实现此目的,而无需定义本机查询.

@Repository公共接口 OrderRangeRepository 扩展 JpaRepository{列表<OrderEntity>findByAmountBetween(int startAmt, int endAmt);}

如果你想使用本机查询将其更改为

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

您可以通过执行以下操作来调用服务中的查询

@Service公共类 OrderRangeService {@自动连线OrderRangeRepository orderRangeRepository ;公共列表<OrderEntity>findAmountsBetween(int startAmt, int endAmt) {列表<OrderEntity>amountBetween = orderRangeRepository.findByAmountBetween(startAmt, endAmt);退货金额之间;}}

最后,在您的控制器中,您应该自动装配 OrderRangeService 并调用 findAmountsBetween 服务方法

@AutowiredOrderRangeService orderRangeService;@GetMapping("/amountsFromAndTo")@ResponseBodypublic String getAmounts(@RequestParam int startAmt, @RequestParam int endAmt) {列表<OrderEntity>orderEntityL = orderRangeService.findAmountsBetween(startAmt, endAmt);返回 orderEntityL.toString();}

Using Spring Dat JPA, I need to query my database and return a range of OrderEntitys based on a startAmt and a endAmt of amounts. I'm not sure if I should map these two variables to entity OrderEntity, as fields in some type of separate class/entity/model, or simply declare them in my native query. Perhaps I should be using a service that implements EntityManager.createNativeQuery()?

Would like to do something like :

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

If I were to use EntityManager.createNativeQuery() in a service, perhaps something like below :

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

解决方案

You can achieve this with Spring Data JPA without defining a native query.

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

If you want to use the native query change it to

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

You can invoke the query in a service by doing

@Service public class OrderRangeService { @Autowired OrderRangeRepository orderRangeRepository ; public List<OrderEntity> findAmountsBetween(int startAmt, int endAmt) { List<OrderEntity> amountsBetween = orderRangeRepository.findByAmountBetween(startAmt, endAmt); return amountsBetween; } }

Finally, from your controller, you should autowire the OrderRangeService and invoke the findAmountsBetween service method

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

更多推荐

Spring Data JPA 本机查询中的变量

本文发布于:2023-10-25 00:27:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1525418.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:本机   变量   Spring   Data   JPA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!