# jpa-dsq **Repository Path**: jiezzz/jpa-dsq ## Basic Information - **Project Name**: jpa-dsq - **Description**: jpa 的动态简易查询 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-02-01 - **Last Updated**: 2022-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jpa-dsq #### 介绍 jpa 的动态简易查询 #### 安装教程 ### Maven #### 使用说明 #### 每个条件查询支持三个参数: 1. **property**: 字段名称。 2. **values**: 具体查询的值,eq/ne/like 支持多个值。 #### 例子 ```java public Page findAll(PersonDto dto){ Specification specification=Specifications.and() .eq("name",dto.getName()) .gt("age",18) .between("birthday",new Date(),new Date()) .like("nickName","%og%","%me") .build(); return personRepository.findAll(specification,new PageRequest(0,15)); } ``` #### Equal/NotEqual例子 查询任何昵称等于 "dog",名字等于 "Jack"/"Eric"或为null并且公司也为null的人。 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.and() .eq("nickName","dog") .eq(StringUtils.isNotBlank(request.getName()),"name","Jack","Eric",null) .eq("company",null) //or eq("company", (Object) null) .build(); return personRepository.findAll(specification); } ``` #### In/NotIn例子 查询任何名字等于 "Jack" 或 "Eric" 并且公司不等于 "ThoughtWorks" 或 "IBM" 的人。 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.and() .in("name",request.getNames().toArray()) //or in("name", "Jack", "Eric") .notIn("company","ThoughtWorks","IBM") .build(); return personRepository.findAll(specification); } ``` #### 比较例子 支持任何实现Comparable接口的类的比较,查询任何年纪大于等于18的人。 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.and() .gt(Objects.nonNull(request.getAge()),"age",18) .lt("birthday",new Date()) .build(); return personRepository.findAll(specification); } ``` #### Between例子 查询任何年龄在18到25,生日在某个时间段的人。 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.and() .between(Objects.nonNull(request.getAge(),"age",18,25) .between("birthday",new Date(),new Date()) .build(); return personRepository.findAll(specification); } ``` #### Like/NotLike例子 查询任何名字包含 %ac% 或 %og%,公司不包含 %ec% 的人。 ```java public Page findAll(SearchRequest request){ Specification specification=Specifications.and() .like("name","ac","%og%") .notLike("company","ec") .build(); return personRepository.findAll(specification); } ``` #### Or例子 支持或条件查询。 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.or() .like("name","%ac%") .gt("age",19) .build(); return phoneRepository.findAll(specification); } ``` #### And and Or 例子 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.and() .like("name","%ac%") .predicate(Specifications.or() .lt("age",19) .gt("age",25) .build()) .build(); return personRepository.findAll(specification); } ``` #### 关联查询 每个条件查询都支持左连接查询。 多对一,一对多查询,查询任何名字等于 "Jack" 并且此人的电话品牌是 "HuaWei"的人。 ```java public List findAll(OrderDto dto){ Specification specification=Specifications.and() .eq("brand","HuaWei") .eq("order.name","Jack") .build(); return phoneRepository.findAll(specification); } ``` 多对多查询,查询任何年龄在10到35之间并且其地址在 "Chengdu" 的人。 ```java public List findAll(SearchRequest request){ Specification specification=Specifications.and() .between("age",10,35) .eq(StringUtils.isNotBlank(jack.getName()),"addresses.street","Chengdu") .build(); return phoneRepository.findAll(specification); } ``` ### Copyright and license Licensed under [Apache License]