03-Specification查询

    @Test
    public void findByCustNameEqualBySpecification(){
        Optional<Customer> optional = customerDao.findOne(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                return criteriaBuilder.equal(root.get("custId"), 5L);
            }
        });
        if (optional.isPresent()){
            Customer customer = optional.get();
            log.info("customer="+customer);
        }
    }

    // 查询多个 findAll
    @Test
    public void findAllByCustNameLikeBySpecification(){
        List<Customer> customerList = customerDao.findAll(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                return criteriaBuilder.like(root.get("custName"), "%lisi%");
            }
        });
        for (Customer customer : customerList) {
            log.info(customer.toString());
        }
    }

    // findAll带分页
    @Test
    public void findAllByCustNameLikePageBySpecification(){
        Page<Customer> all = customerDao.findAll(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                return criteriaBuilder.like(root.get("custName"), "%lisi%");
            }
        }, PageRequest.of(1, 5));

        for (Customer customer : all) {
            log.info(customer.toString());
        }
    }

    // findAll带排序
    @Test
    public void findAllByCustNameLikeSortBySpecification(){
        List<Customer> all = customerDao.findAll(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                return criteriaBuilder.like(root.get("custName"), "%lisi%");
            }
        }, Sort.by(Sort.Direction.DESC, "custId"));
        for (Customer customer : all) {
            log.info(customer.toString());
        }
    }

    // findAll带排序实现2
    @Test
    public void findAllByCustNameLikeSort2BySpecification(){
        List<Customer> all = customerDao.findAll(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Predicate predicate = criteriaBuilder.like(root.get("custName"), "%lisi%");
                Predicate p = criteriaQuery.where(predicate).orderBy(criteriaBuilder.desc(root.get("custId"))).getRestriction();
                return p;
            }
        });
        for (Customer customer : all) {
            log.info(customer.toString());
        }
    }

    @Test
    public void findAllByManyParamsBySpecification(){
        List<Customer> all = customerDao.findAll(new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Predicate predicate = criteriaBuilder.like(root.get("custName"), "%lisi%");
                Predicate predicate1 = criteriaBuilder.like(root.get("custAddress"), "%南昌%");
                Predicate and = criteriaBuilder.and(predicate, predicate1);
                return and;
            }
        });
        for (Customer customer : all) {
            log.info(customer.toString());
        }
    }


    @Autowired
    FatherDao fatherDao;

    /**
     * 根据儿子的名字查询父亲
     */
    @Test
    @Transactional
    @Commit
    public void MultiTableQuerySpecification(){
        Optional<Father> option = fatherDao.findOne(new Specification<Father>() {
            @Override
            public Predicate toPredicate(Root<Father> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                Join<Object, Object> join = root.join("sons", JoinType.LEFT);
                Predicate predicate = criteriaBuilder.equal(join.get("name"), "刘禅");
                return predicate;
            }
        });

        if (option.isPresent()){
            Father father = option.get();
            log.info(father.toString());
        }
    }

Last updated

Was this helpful?