SpringBoot中Example的动态条件查询

一、无匹配器的情况:
Person person = new Person();
person.setName("test");
Role role = new Role();
role.setName("经理");
person.setRole(role);
... 
Example<Person> ex = Example.of(person); //动态查询 
personRepository.findAll(ex);
personRepository.findAll(ex,pageable);
//分页
二、匹配器多条件组合(自己多动手试试各种各样的条件组合)
        Person person = new Person();
        person.setName(name);
        //默认匹配器:字符串采用精准查询,忽略大小写(文档说不忽略大小写,本人测试时发现是忽略大小写的)
        ExampleMatcher matcher = ExampleMatcher.matching()
//                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)  //改变默认字符串匹配为:模糊查询
//                .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())  //name字段模糊匹配
//                .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.startsWith())  //name字段开头模糊匹配
//                .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.endsWith())  //name字段结尾模糊匹配
//                .withIgnorePaths("id","phone"); //忽略id,phone字段
        Example<Person> ex = Example.of(person,matcher); //动态查询
        return personRepository.findAll(ex);
        retuen personRepository.fiadAll(ex,pageable)  //分页
总结:
(Person) 一对一,多对一可以通过set另外一个实体(Role)的字段来实现动态查询,但是(Person)一对多通过Example来动态查询,本人试过不行(JpaSpecificationExecutor可以),你们又没有idea?

posted on 2018-12-03 16:26  陌生街中吹起褪色故梦  阅读(10237)  评论(0编辑  收藏  举报