当前位置:   article > 正文

java,基于Spring Data JPA的动态查询实现模糊搜索,多条件使用空格隔开。无分页。hibernate_jpafindall方式实现字段模糊查询

jpafindall方式实现字段模糊查询
  1. @GetMapping(path = "/like")
  2. @ApiOperation(value = "模糊查找表", nickname = "findAllByQuery")
  3. public List<MedicalInsuranceDirectory> findAllByQuery(@RequestParam String query) {
  4. return medicalinsureFileService.findAllByQuery(query);
  5. }

          如果想为空查全部则增加判断即可。

         我这里不能为空。

Service层

  1. /**
  2. * 动态查询医保文件
  3. */
  4. @Override
  5. public List<MedicalInsuranceDirectory> findAllByQuery(String params) {
  6. List<String> paramsList = Arrays.asList(params.trim().split(" "));
  7. //动态查询
  8. Specification querySpecifi = new Specification<Map<String, String>>() {
  9. @Override
  10. public Predicate toPredicate(Root<Map<String, String>> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
  11. List<Predicate> predicates = new ArrayList<>();
  12. predicates.add(criteriaBuilder.ge(root.get("id"), 10000L));
  13. paramsList.forEach(p -> {
  14. predicates.add(criteriaBuilder.like(root.get("params"), "%" + p.toUpperCase() + "%"));
  15. });
  16. return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
  17. }
  18. };
  19. List<MedicalInsuranceDirectory> chineseMedicineTabletList = medicalInsuranceDirectoryRepository.findAll(querySpecifi);
  20. return chineseMedicineTabletList;
  21. }

参数处理:

        首先将params字符串的前后空格去除,然后使用空格作为分隔符将其拆分成多个子字符串。这些子字符串被存储在一个列表paramsList中。

动态查询:

        使用Specification接口创建一个动态查询。这是Spring Data JPA提供的一种方式,用于在运行时构建查询条件。

查询条件构建:

        在toPredicate方法中,我们定义了查询的条件:

        a. 创建一个空的谓词列表predicates。

        b. 添加一个查询条件,表示字段id的值应该大于或等于10000。

        c. 对于paramsList中的每一个元素,都添加一个模糊查询条件,表示字段params的值应该包含这个元素(不区分大小写)。

执行查询:

        使用上面构建的查询条件,通过medicalInsuranceDirectoryRepository的findAll方法执行查询,并将结果存储到chineseMedicineTabletList列表中。

返回结果:

        返回查询到的医保文件列表。

Repository层
  1. /**
  2. * @author: Yz
  3. * @Description:
  4. * @create: 2023-07-02
  5. **/
  6. @Repository
  7. public interface MedicalInsuranceDirectoryRepository extends JpaRepository<MedicalInsuranceDirectory, Long>, BaseRepository<MedicalInsuranceDirectory>, JpaSpecificationExecutor<MedicalInsuranceDirectory> {
  8. List<MedicalInsuranceDirectory> findAll(Specification querySpecifi);
  9. }

空格隔开查询。前端进行分页。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/499130
推荐阅读
相关标签
  

闽ICP备14008679号