# jpa-query-wrapper
**Repository Path**: smxy6394/jpa-query-wrapper
## Basic Information
- **Project Name**: jpa-query-wrapper
- **Description**: spring data jpa的LambdaQueryWrapper 实现,可以和写MP一样写JPA代码了
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 11
- **Created**: 2023-03-07
- **Last Updated**: 2023-03-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# jpa-query-wrapper
#### 介绍
spring data jpa的LambdaQueryWrapper 和QueryWrapper 实现,使用方法和mybatis plus保持一致,减少了mybatis plus开发者转向JPA的学习成本,仅仅实现了80%的功能,欢迎大家一起开发
#### MAVEN
```xml
com.fhs-opensource
jpa-query-wrapper
1.0.3
```
#### 如何使用
1、DAO 继承JpaSpecificationExecutor
``` java
@Repository
public interface SchoolRepository extends JpaRepository, JpaSpecificationExecutor {
}
```
2、调用dao的findAll
``` java
@Autowired
private SchoolRepository schoolRepository;
@Test
public void test(){
System.out.println(schoolRepository.findAll(new LambdaQueryWrapper().or(wrapper->{
wrapper.eq(School::getId,1);//id为1 or id 为2 都被查出来
wrapper.eq(School::getId,2);
}).like(School::getSchoolName,"一") //名称like 一的
.orderByAsc(School::getId).build()));//排序
}
```
3、高级用法
有的时候前端查询我们会封装一个类来接收前端参数,传统模式我们要把这个类转换为wrapper对象后查询,本插件提供了自动转换功能,demo如下:
``` java
//pojo 主要是Wrapperble
@Data
@Builder
@AllArgsConstructor
public class SchoolQueryPayload implements Wrapperble {
@Eq
private Integer id;
@Like
private String schoolName;
//remark字段或者name字段like value即可
@GroupOrLike(fields = {"schoolName","remark"})
private String remarkOrName;
}
@Test
public void testQueryWrapper(){
/*
1 SchoolQueryPayload模拟前端传过来的参数
2 merge 一个LambdaQueryWrapper 模拟部分后端需要拼接的条件,比如租户id 用户id之类的
*/
System.out.println(schoolRepository.findAll(SchoolQueryPayload.builder()
.schoolName("一").remarkOrName("2").build().asWrapper()
.merge(new LambdaQueryWrapper().eq(School::getId,1)).build()));
}
```
4、SQL查询结果自动转换DTO
比如一个DTO是几个表联合查询或者使用聚合函数查询,使用原来的nativeSQL实现起来很恶心,要接收List