首先定义一个接口继承JpaRepository 和JpaSpecificationExecutor。
package com.yaoyanshe.crf.dao;
import com.yaoyanshe.crf.model.CrfMo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* <p>
* CRF版本 服务类
* </p>
*
* @author tan.wei
* @since 2021-03-09
*/
@Repository
public interface CrfMoDao extends JpaRepository<CrfMo,Long>, JpaSpecificationExecutor<CrfMo> {
}
@Override
public Page<CrfMoResponse> findPage(CrfPage page) {
Sort sort = new Sort(Sort.Direction.DESC, "createTime");
Pageable pageable = new PageRequest(page.getPageNo(), page.getPageSize(), sort);
CrfMo crfMo = new CrfMo();
crfMo.setIsDeleted(0);
if(Objects.nonNull(page.getProjectId())){
crfMo.setProjectId(page.getProjectId());
}
Example<CrfMo> example = Example.of(crfMo);
Page<CrfMo> crfMoPage = crfMoDao.findAll(new Specification<CrfMo>() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
Predicate isDeleted = criteriaBuilder.equal(root.get("isDeleted"), crfMo.getIsDeleted());
Predicate projectId = criteriaBuilder.equal(root.get("id"), crfMo.getProjectId());
Predicate or = criteriaBuilder.or(projectId, isDeleted);
return criteriaBuilder.and(or);
}
}, pageable);
return ObjectUtils.build(Page.class,crfMoPage);
}
@Override
public DataPageResponse QueryList(PageMoRequest request) {
Sort sort = new Sort(Sort.Direction.DESC, "createTime");
PageRequest pageable = PageRequest.of(request.getPageNo() - 1, request.getPageSize(), sort);
DataPageMo dataPageMo = new DataPageMo();
dataPageMo.setProjectId(request.getProjectId());
dataPageMo.setIsDeleted(0);
dataPageMo.setDataPageMoId(request.getMoAndName());
dataPageMo.setName(request.getMoAndName());
dataPageMo.setCrfId(request.getCrfId());
Page<CrfMo> all = dataPageMoDao.findAll(new Specification<CrfMo>() {
@Override
public Predicate toPredicate(Root<CrfMo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
Predicate name = criteriaBuilder.equal(root.get("name"), dataPageMo.getName());
Predicate dataPageMoId = criteriaBuilder.equal(root.get("dataPageMoId"), dataPageMo.getDataPageMoId());
Predicate projectId = criteriaBuilder.equal(root.get("projectId"), dataPageMo.getDataPageMoId());
Predicate isDeleted = criteriaBuilder.equal(root.get("isDeleted"), dataPageMo.getIsDeleted());
predicates.add(criteriaBuilder.and(projectId, isDeleted));
if (StringUtils.isNotEmpty(request.getMoAndName())) {
return criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])), criteriaBuilder.or(name, dataPageMoId)).getRestriction();
}
return criteriaBuilder.and(projectId, isDeleted);
}
}, pageable);
return new DataPageResponse(ObjectUtils.buildBatch(DataPageMoResponse.class, all.getContent()), all.getTotalElements());
}