• 通过实体反射实现CriteriaQuery并列条件查询


    将实体反射之后获取查询字段的值,并添加到Predicate对象数组中

    public Predicate getPredicateAnd(T entity, Root<T> root, CriteriaBuilder cb) throws IntrospectionException
    
            , InvocationTargetException, IllegalAccessException {
        try {
            //通过反射获取类型
    Class<?> c = entity.getClass();
            //获取类的字段
    Field[] fields = c.getDeclaredFields();
            List<Predicate> predicateList = new ArrayList();
            for (Field field : fields) {
                PropertyDescriptor pd = new PropertyDescriptor(field.getName(), c);
                //获得get方法
    Method getMethod = pd.getReadMethod();
                //执行get方法返回一个Object
    Object fieldVal = getMethod.invoke(entity);
    
                if (fieldVal != null && !fieldVal.equals(0)) {
                    Path<String> path = root.get(field.getName());
                    Predicate p = cb.equal(path, fieldVal);
                    predicateList.add(p);
                }
            }
            return cb.and(predicateList.toArray(new Predicate[]{}));
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return null;
    }

    下面是使用方法,因返回类型为Predicate所以直接作为参数传入到CriteriaQuery<?>的where函数中

    public T findOne(final T entity) {
            return getSpecDao().findOne(new Specification<T>() {
                @Override
                public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {      
                    try {
                        query.where( getPredicateAnd(entity, root, cb));
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (IntrospectionException e) {
                        e.printStackTrace();
                    }
                    return null;
                }
            });
        }
  • 相关阅读:
    【微积分】 02
    【微积分】 01
    【线性代数】 09
    云南国庆八日游策划书
    Kubectl工具常用命令
    Linux 常用命令缩写及对应的
    kubectl工具的windows安装方法
    Intellij IDEA工具的常用快捷键
    如何理解docker镜像build中的上下文
    【转】在服务器上排除问题的头五分钟&常用命令
  • 原文地址:https://www.cnblogs.com/zhuwenjun/p/4204154.html
Copyright © 2020-2023  润新知