/**
* GET /E: get all the servants.
*
* @param pageable the pagination information
* @return the ResponseEntity with status 200 (OK) and the list of servants in body
*/
@GetMapping("/E")
public ResponseEntity<List<E>> getAllServants(Pageable pageable, HttpServletRequest request) {
log.debug("REST request to get a page of E");
String keyword = request.getParameter("keyword");
if (keyword == null) keyword = "";
List<EDTO> conditions = new ArrayList<>();
Page<E> page;
if (CollectionUtils.isNotEmpty(conditions)) {
page = ERepository.findAll((Specification<Servant>) (root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
// E表与provice表左连接,根据E对象中属性birthPrvn进行连接
Join<E, Province> join = root.join("birthPrvn", JoinType.LEFT);
Predicate fp = cb.conjunction();
Predicate p = null, pNew = null;
for (SearchDTO sd : conditions) {
String conStr = sd.getCondition().trim();
switch (conStr) {
case "=":
pNew = cb.equal(root.get(field).as(String.class), value);
break;
case "like":
pNew = cb.like(root.get(field).as(String.class), "%" + value + "%");
break;
case "=":
pNew = cb.equal(root.get(field), Integer.parseInt(value));
break;
case ">":
pNew = cb.gt(root.get(field), Integer.parseInt(value));
break;
case "<":
pNew = cb.lt(root.get(field), Integer.parseInt(value));
break;
}
switch ("date") {
case "=":
pNew = cb.equal(root.get(field), date);
break;
case ">":
pNew = cb.greaterThan(root.get(field), date);
break;
case "<":
pNew = cb.lessThan(root.get(field), date);
break;
}
}
list.add(p);
Predicate[] pArray = new Predicate[list.size()];
fp = cb.and(list.toArray(pArray));
// 根据provice表中spell属性进行排序
return query.where(fp)
.orderBy(cb.asc(join.get("spell"))).getRestriction();
}, pageable);
} else if (StringUtils.isNotBlank(keyword)) {
page = ERepository.listBykeywordOrderByBirthPlace(keyword, pageable);
} else {
page = ERepository.findAllByStateOrderByChineseName(DataState.VALID, pageable);
}
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/servants");
return ResponseEntity.ok().headers(headers).body(page.getContent());
}
resposity需要实现接口 JpaSpecificationExecutor
@Repository
public interface ThirdScholarBasicRepo extends JpaRepository<ScholarBasicDO, Long>, JpaSpecificationExecutor<ScholarBasicDO> {
}