07、Spring Data JPA 实战 - example的基本使用

简单查询

@Test
public void testExample(){
   
     
    Customer customer=new Customer();
    customer.setCustName("飞飞飞");
    Example<Customer> example=Example.of(customer);

    List<Customer> customers = this.customerRepository.findAll(example);
    customers.forEach(value -> System.out.println(value));
}

使用ExampleMatcher

/**
     * 测试ExampleMatcher
     */
@Test
public void testExampleMatcher(){
   
     
    Customer customer=new Customer();
    customer.setCustName("记忆");
    customer.setCustIndustry("溜溜");
    customer.setCustPhone("5566");
    customer.setCustAddress("china");
    customer.setCustSource("aaa");

    ExampleMatcher exampleMatcher=ExampleMatcher.matching()
        .withMatcher("custName",ExampleMatcher.GenericPropertyMatchers.startsWith())   //模糊查询匹配开头
        .withMatcher("custIndustry",ExampleMatcher.GenericPropertyMatchers.contains()) //全部模糊查询
        .withIgnoreCase("custAddress")   //忽略大小写
        .withMatcher("custPhone",ExampleMatcher.GenericPropertyMatchers.exact())  //精准匹配
        .withIgnorePaths("custSource");  //忽略字段,即不管custSource是什么值都不加入查询条件
    Example<Customer> example=Example.of(customer,exampleMatcher);
    List<Customer> customers = this.customerRepository.findAll(example);
    customers.forEach(value-> System.out.println(value));
}

输出

 

lambda的方式

ExampleMatcher exampleMatcher2=ExampleMatcher.matching()
    .withMatcher("custName",match->match.startsWith())
    .withMatcher("custIndustry",match->match.contains())
    .withMatcher("custAddress",match->match.ignoreCase())
    .withMatcher("custPhone",match->match.exact())
    .withIgnorePaths("custSource");

该种方式和上面的ExampleMatcher效果是相同的

StringMatcher 参数

Matching 生成的语句 说明
DEFAULT (case-sensitive) firstname = ?0 默认(大小写敏感)
DEFAULT (case-insensitive) LOWER(firstname) = LOWER(?0) 默认(忽略大小写)
EXACT (case-sensitive) firstname = ?0 精确匹配(大小写敏感)
EXACT (case-insensitive) LOWER(firstname) = LOWER(?0) 精确匹配(忽略大小写)
STARTING (case-sensitive) firstname like ?0 + ‘%’ 前缀匹配(大小写敏感)
STARTING (case-insensitive) LOWER(firstname) like LOWER(?0) + ‘%’ 前缀匹配(忽略大小写)
ENDING (case-sensitive) firstname like ‘%’ + ?0 后缀匹配(大小写敏感)
ENDING (case-insensitive) LOWER(firstname) like ‘%’ + LOWER(?0) 后缀匹配(忽略大小写)
CONTAINING (case-sensitive) firstname like ‘%’ + ?0 + ‘%’ 模糊查询(大小写敏感)
CONTAINING (case-insensitive) LOWER(firstname) like ‘%’ + LOWER(?0) + ‘%’ 模糊查询(忽略大小写)