SpringJPA 直接实现count(*)

刚开始使用JPA时,基本都依赖@query(SQL)注解通过原生sql来实现

根据编号统计条数:
方法一:

@Query(" select count(t) from FollowerInfo t where investUserId = :invUserId")
    Integer findFollowerNumberByInvUserId(@Param("invUserId") Long invUserId);

这种原生的方式,跟直接写SQL没什么区别。虽然能实现功能,但是浪费了JPA的简洁简化代码的设计的优点。

网上看到另外一个方法:
List findAll(Specification spec);
在repository层findAll,然后在service层封装,获取list.size()来处理总条数问题。
这样避免了写SQL语句。

今天看了一下CrudRepository的源码 发现该接口源码里面有一个函数:

方法二:

/**
     * Returns the number of entities available.
     * 
     * @return the number of entities
     */
    long count();

于是继承了CrudRepository 写了一个demo:

方法三:

Long countByInvestUserId(Long investUserId);

一行代码就全部搞定! 效果跟方法1一样

Spring Boot中,可以使用Spring Data JPA和JPQL(Java Persistence Query Language)来实现count group by操作。 首先,需要定义一个Entity类,包含要分组和计数的属性。假设我们有一个实体类叫做Order,包含属性id、customerId和price: ```java @Entity @Table(name = "orders") public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "customer_id") private Long customerId; private Double price; // getters and setters } ``` 然后,使用Spring Data JPA定义一个Repository接口,继承JpaRepository,并声明一个查询方法,使用JPQL实现count group by操作: ```java @Repository public interface OrderRepository extends JpaRepository<Order, Long> { @Query("SELECT o.customerId, COUNT(o.id) FROM Order o GROUP BY o.customerId") List<Object[]> countGroupByCustomerId(); } ``` 在这个方法中,我们使用JPQL查询语句"SELECT o.customerId, COUNT(o.id) FROM Order o GROUP BY o.customerId"来实现count group by操作。这个查询语句会返回一个Object数组的列表,每个数组包含两个元素,第一个元素是customerId,第二个元素是该customerId下的订单数量。 最后,可以在Service层调用这个方法并处理返回的结果: ```java @Service public class OrderService { @Autowired private OrderRepository orderRepository; public Map<Long, Long> countGroupByCustomerId() { List<Object[]> list = orderRepository.countGroupByCustomerId(); Map<Long, Long> map = new HashMap<>(); for (Object[] obj : list) { Long customerId = (Long) obj[0]; Long count = (Long) obj[1]; map.put(customerId, count); } return map; } } ``` 在Service层中,我们调用OrderRepository的countGroupByCustomerId方法获取结果列表,然后将结果转换为一个Map<Long, Long>,其中key是customerId,value是该customerId下的订单数量。 这样,就实现了在Spring Boot中使用Spring Data JPA和JPQL实现count group by操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值