spring-data-jpa Specification构建动态ql

1.持久层继承JpaSpecificationExecutor

@Repository
public interface DailyBillingRepository extends PagingAndSortingRepository<DailyBilling, Long>, JpaSpecificationExecutor<DailyBilling> {

}
复制代码

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);
}
复制代码

调用 :

 public Page<DailyBilling> getList(Integer page, Integer rows,String beginTime,String endTime,String result){
        //Specification创建动态sql
        //Root<ExportSubsidyPersonnel> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder
        Specification<DailyBilling> specification= (root, query, cb) -> {
            Predicate predicate = cb.conjunction();
 
            if (StringHelper.isNotBlank(beginTime) && StringHelper.isNotBlank(endTime)){
                // sql ==》 billData between beginTime and endTime
                predicate.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 <> 0
                Predicate 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));
    }
复制代码

CriteriaBuilder接口提供了操作sql的基本语句,可直接调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值