spring data jpa分页查询

一、创建

package com.ligowave.bill.domain.billsystem.repository;

import com.ligowave.bill.domain.billsystem.entity.BasePackage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.util.List;

public interface BasePackageRepository extends JpaRepository<BasePackage,Integer>,JpaSpecificationExecutor<BasePackage> {

    List<BasePackage> findAllByNameAndOrgId(String name,String orgId);
}

二、创建service

package com.ligowave.bill.service;

import com.ligowave.bill.domain.billsystem.entity.BasePackage;
import com.ligowave.bill.domain.billsystem.query.BasePackageQuery;
import org.springframework.data.domain.Page;

public interface BasePackageService {
    Page<BasePackage> findPageList(Integer pageSize, Integer pageNum, BasePackageQuery basePackageQuery);
    
}

三、service实现

package com.ligowave.bill.service.impl;

import com.ligowave.bill.common.util.DateUtil;
import com.ligowave.bill.domain.billsystem.entity.BasePackage;
import com.ligowave.bill.domain.billsystem.query.BasePackageQuery;
import com.ligowave.bill.domain.billsystem.repository.BasePackageRepository;
import com.ligowave.bill.service.BasePackageService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;


@Service
@Transactional(value = "billSystemTransactionManager")
public class BasePackageServiceImpl implements BasePackageService {

    @Autowired
    BasePackageRepository basePackageRepository;

    @Override
    public Page<BasePackage> findPageList(Integer pageSize, Integer pageNum, BasePackageQuery basePackageQuery) {
        //前台查询第一页数据page从0开始
        Pageable pageable = new PageRequest(pageNum-1, pageSize, Sort.Direction.ASC, "id");
        Page<BasePackage> basePackages = basePackageRepository.findAll(new Specification<BasePackage>() {
            @Override
            public Predicate toPredicate(Root<BasePackage> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<>();
                if (!StringUtils.isBlank(basePackageQuery.getOrgId())){
                    list.add(criteriaBuilder.equal(root.get("orgId").as(String.class),basePackageQuery.getOrgId()));
                }
                if (!StringUtils.isBlank(basePackageQuery.getName())) {
                    list.add(criteriaBuilder.equal(root.get("name").as(String.class), basePackageQuery.getName()));
                }
                if (!StringUtils.isBlank(basePackageQuery.getDescription())) {
                    list.add(criteriaBuilder.equal(root.get("description").as(String.class), basePackageQuery.getDescription()));
                }
                if (basePackageQuery.getWhetherReferenced() == 0) {
                    //被引用
                    list.add(criteriaBuilder.gt(root.get("whetherReferenced").as(Integer.class), 0));
                } else {
                    //未引用
                    list.add(criteriaBuilder.lt(root.get("whetherReferenced").as(Integer.class), 1));
                }
                if (!StringUtils.isBlank(basePackageQuery.getBeforeBegintime())) {
                    list.add(criteriaBuilder.ge(root.get("beginTime").as(Long.class), DateUtil.dateStrToLong(basePackageQuery.getBeforeBegintime())));
                }
                if (!StringUtils.isBlank(basePackageQuery.getAfterBegintime())) {
                    list.add(criteriaBuilder.le(root.get("beginTime").as(Long.class), DateUtil.dateStrToLong(basePackageQuery.getAfterBegintime())));
                }
                //查询状态不为删除的套餐
                list.add(criteriaBuilder.notEqual(root.get("status").as(Integer.class), 2));
                Predicate[] p = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(p));
            }
        }, pageable);
        return basePackages;
    }    
}

猜你喜欢

转载自my.oschina.net/u/3316877/blog/1604720