Spring-data-Jpa分组分页求和查询

本文介绍了如何在Spring-data-Jpa中进行分组、分页及求和查询。通过创建VO类来封装查询结果,提供了一种在需求变更时保存代码供日后参考的方法。
摘要由CSDN通过智能技术生成

由于需求变更,该部分代码需要从项目中删除,记录到博客中以便日后使用,仅供参考

创建VO类

public class AgriculturalMaterialInputSumVO {
   

    private Long agriculturalMaterialId;

    private Long batchId;

    private BigDecimal assetQuantitySum;

    private Long facilityId;
}

实现类

   public Page<AgriculturalMaterialInputVO> queryDouble(PageParam<AgriculturalMaterialInputBO> param) {
   
        //分页参数
        Pageable pageable=PageRequest.of(param.getPage()-1, param.getSize());
        //criteriaBuilder用于构建CriteriaQuery的构建器对象
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        //criteriaQuery包含查询语句的各个部分,如where、max、sum、groupBy、orderBy等
        CriteriaQuery<AgriculturalMaterialInputSumVO> query = criteriaBuilder.createQuery(AgriculturalMaterialInputSumVO.class);
        //获取查询实例的属性,select * from books
        Root<AgriculturalMaterialInput> root = query.from(AgriculturalMaterialInput.class);
        //分组求和
         //相当于select type,max(price) maxPrice,sum(price) sumPrice from books中select 与 from之间的部分
         query.multiselect(root.get("agriculturalMaterialId"),root.get("batchId"),criteriaBuilder.toBigDecimal(criteriaBuilder.sumAsLong(root.get("assetQuantity"))),root.get("facilityId"));

        //条件查询相当于where...
        List<Predicate> predicateList = new ArrayList<>();
        if (Optional.ofNullable(param).map(PageParam::getEntity).isPresent()){
   
	        if (OrganizationList.printList().size() > 0) {
   
		        Expression<Long> exp = root.get("organizationId");
		        predicateList.add(exp.in(OrganizationList.printList()));
	        }
            if(Optional.ofNullable(param.getEntity()<
您好!关于Spring Data JPA分页查询,您可以按照以下步骤进行操作: 1. 首先,确保您的项目中已经引入了Spring Data JPA依赖,以及相关的数据库驱动依赖。 2. 创建一个继承自JpaRepository的接口,用于定义您的数据访问操作。例如: ```java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository<User, Long> { // 在这里可以定义各种自定义的查询方法 } ``` 3. 在您的Service层或者Controller层注入该Repository,并使用其提供的分页方法进行查询。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserRepository userRepository; public Page<User> getUsersByPage(int pageNum, int pageSize) { PageRequest pageRequest = PageRequest.of(pageNum, pageSize); return userRepository.findAll(pageRequest); } } ``` 在上述示例中,我们通过调用`userRepository.findAll(pageRequest)`方法实现了分页查询,并传入`PageRequest`对象来指定页码和每页大小。 4. 最后,在您的Controller层中使用该Service方法来处理分页查询请求,并将结果返回给前端。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public Page<User> getUsersByPage(@RequestParam int pageNum, @RequestParam int pageSize) { return userService.getUsersByPage(pageNum, pageSize); } } ``` 在上述示例中,我们通过`@RequestParam`注解来接收前端传递的pageNum和pageSize参数,并调用UserService中的方法进行查询。 这样,您就可以使用Spring Data JPA进行分页查询了。希望能对您有所帮助!如果您还有其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值