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

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

Spring Data JPA提供了一个Specification可以用来拼接where之后的条件。
Spring Data JPA之自动装配查询条件_第1张图片

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

Spring Data JPA之自动装配查询条件_第2张图片

Spring Data JPA之自动装配查询条件_第3张图片

Spring Data JPA提供了一个入口
Spring Data JPA之自动装配查询条件_第4张图片

数据持久层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 contents,Path 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,页面定义要过滤的字段和过滤方式。
Spring Data JPA之自动装配查询条件_第5张图片
注意:root.get(key)这里的key要和实体的属性名称一致。

你可能感兴趣的:(工具Util类)