Spring Data JPA之自动装配查询条件

在查询后台数据时,有时因为数据太多,需要加一些过滤条件,但是如果过滤条件修改,后台也需要相应的修改对应的判断和拼接查询条件。

Spring Data JPA提供了一个Specification可以用来拼接where之后的条件。
这里写图片描述

来分别看看CriteriaQuery和CritertiaBuilder分别是用来做什么的。

这里写图片描述

这里写图片描述

Spring Data JPA提供了一个入口
这里写图片描述

数据持久层Repository接口继承JapSpecificationExecutor接口可以直接调用它的方法。
自己写的一个工具类,用来自动装配后台查询条件

public class ParamUtil {

    /**
     * 如 age = 10 ==> filterType是 "=",name是age,contents10 
     * @param cb
     * @param filterType 过滤方式  "="等于,">"大于,"<"小于,">="大于等于,"<="小于等于,"%"模糊匹配,">=|<="相当于between
     * @param contents 过滤内容 
     * @param name 过滤对应的实体属性
     * @return
     */
    public static Predicate filterCondition(CriteriaBuilder cb,String filterType,List<String> contents,Path<String> name){

        switch(filterType) {
            case "%":
                return cb.like(name,contents.get(0)+"%");

            case "=":
                return cb.equal(name,contents.get(0));

            case ">=":
                return cb.greaterThanOrEqualTo(name,contents.get(0));

            case ">":
                return cb.greaterThan(name,contents.get(0));

            case "<=":
                return cb.lessThanOrEqualTo(name,contents.get(0));

            case "<":
                return cb.lessThan(name,contents.get(0));

            case ">=|<=":
                return cb.between(name,contents.get(0),contents.get(1));

            default:
                return cb.equal(name,contents.get(0));          
        }       
    }   
}

直接调用JpaSpecificationExecutor,页面定义要过滤的字段和过滤方式。
这里写图片描述
注意:root.get(key)这里的key要和实体的属性名称一致。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值