spring-data-jpa Specification构建动态ql
生活随笔
收集整理的這篇文章主要介紹了
spring-data-jpa Specification构建动态ql
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.持久層繼承JpaSpecificationExecutor
@Repository public interface DailyBillingRepository extends PagingAndSortingRepository<DailyBilling, Long>, JpaSpecificationExecutor<DailyBilling> {} 復(fù)制代碼2.JpaSpecificationExecutor?提供的方法:
public interface JpaSpecificationExecutor<T> {T findOne(Specification<T> spec);List<T> findAll(Specification<T> spec);Page<T> findAll(Specification<T> spec, Pageable pageable);List<T> findAll(Specification<T> spec, Sort sort);long count(Specification<T> spec); } 復(fù)制代碼調(diào)用 :
public Page<DailyBilling> getList(Integer page, Integer rows,String beginTime,String endTime,String result){//Specification創(chuàng)建動(dòng)態(tài)sql//Root<ExportSubsidyPersonnel> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilderSpecification<DailyBilling> specification= (root, query, cb) -> {Predicate predicate = cb.conjunction();if (StringHelper.isNotBlank(beginTime) && StringHelper.isNotBlank(endTime)){// sql ==》 billData between beginTime and endTimepredicate.getExpressions().add(cb.between(root.<Date>get("billData"), DateHelper.getDate(beginTime), DateHelper.getDate(endTime)));}if (StringHelper.isNotBlank(result) && !result.equals("2")){// sql ==》 differenceAmount = 0 或者 differenceAmount <> 0Predicate p = null;if ("1".equals(result)){p = cb.equal(root.<BigDecimal>get("differenceAmount"),BigDecimal.ZERO);}if ("0".equals(result)){p = cb.notEqual(root.<BigDecimal>get("differenceAmount"),BigDecimal.ZERO);}predicate.getExpressions().add(p);}return predicate;};return dailyBillingRepository.findAll(specification,new PageRequest(page,rows));} 復(fù)制代碼CriteriaBuilder接口提供了操作sql的基本語(yǔ)句,可直接調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的spring-data-jpa Specification构建动态ql的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 错题本
- 下一篇: 14.查看信息深入讲解