springdata jpa Example、Pageable分页查询使用

springdata jpa Example、Pageable分页查询使用

  • ExampleMatcher实例查询三要素

    • 实体对象:在ORM框架中与Table对应的域对象,一个对象代表数据库表中的一条记录,如上例中User对象,对应user表。在构建查询条件时,一个实体对象代表的是查询条件中的“数值”部分。如:要查询姓“X”的客户,实体对象只需要存储条件值“X”。

    • 匹配器:ExampleMatcher对象,它是匹配“实体对象”的,表示了如何使用“实体对象”中的“值”进行查询,它代表的是“查询方式”,解释了如何去查的问题。如:要查询姓“X”的客户,即姓名以“X”开头的客户,该对象就表示了“以某某开头的”这个查询方式,如上例中:withMatcher(“userName”, GenericPropertyMatchers.startsWith())

    • 实例:即Example对象,代表的是完整的查询条件。由实体对象(查询条件值)和匹配器(查询方式)共同创建。最终根据实例来findAll即可。(此三点是借用别人的话)

  • 代码实例:

        public Page<DictionaryItem> findDictionaryByPage(BaseParam param) {
         Pageable pageable = PageRequest.of(param.getPageNum(), param.getPageSize(), Sort.Direction.ASC, "orderNo");
         //实体DictionaryItem
         DictionaryItem item = new DictionaryItem();
         item.setDictName(param.getName());
         item.setDictCode(param.getCode());
         //创建匹配器,组装查询条件
         ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                 .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                 .withIgnoreCase(true) //改变默认大小写忽略方式:忽略大小写
                 .withMatcher("dictName", ExampleMatcher.GenericPropertyMatchers.startsWith()) //采用“开始匹配”的方式查询
                 .withMatcher("dictCode",ExampleMatcher.GenericPropertyMatchers.contains())
                 //忽略属性:因为是int类型(基本类型有默认值),需要忽略掉
                 .withIgnorePaths("id","is_use_icon","orderNo",
                         "parentId","dictLevel","createUserId","dbStatus")
                 .withIgnoreNullValues();
         //创建实例
         Example<DictionaryItem> ex = Example.of(item, matcher);
         return dictionaryRepository.findAll(ex,pageable);
     }
    

你可能感兴趣的:(jpa)