- java_to_kotlin
- with jdk
- openapispec
- 도커
- restdocs
- EntityGraph
- 무료 아이콘 폰트
- oraclejdk
- Openjdk
- kotlin
- Observer Pattern
- Spring
- OneToMany
- java
- 폰트어썸
- spring cloud contract
- Spring Cloud
- QueryDSL
- arc browser
- remix icon
- 리믹스아이콘
- springboot
- 라즈베리파이
- 전략패턴
- 옵저버패턴
- 디자인패턴
- Docker
- restcontroller
- fontawesome
- 라즈베리파이 클러스터
- Today
- Total
< Dev-Kidult />
Spring boot JPA Specification + Spring filter 파라미터로 쉽게 조회하기 본문
스프링으로 개발을 하다보면 대부분이 CRUD 개발을 하는것일것이다.
그 중 `R` 중에 List를 조회하는쪽을 개발하다보면 기획자의 요구사항에 맞게 많은 필터(검색조건)에 맞춰서 조회를 하는 경우가 생길것이다.
기존의 경우라면 검색 할 내용이나 여러 조건들을 파라미터로 받아서 서비스단에서 처리를 하였을 것이다.
하지만 지금부터 아래내용을 적용한다면 파라미터로 쿼리를 쓰듯이 써서 넘긴다면 아주 쉽게 해당 내용을 조회 할 수 있다.
https://github.com/turkraft/spring-filter
GitHub - turkraft/spring-filter: Painless filtering library for JPA entities and MongoDB collections. Smoothly integrates with S
Painless filtering library for JPA entities and MongoDB collections. Smoothly integrates with Spring APIs. - GitHub - turkraft/spring-filter: Painless filtering library for JPA entities and MongoDB...
github.com
보면은 아직 별이 많거나 같이 개발하는사람이 있거나 하는건 아니지만 꾸준한 개발 및 배포 그리고 버전업이 이뤄지고 있으며, 써보니 참 괜찮은 라이브러리인것 같다.
해당 예제는 깃허브에 업로드되어있다. 자세한 내용은 깃허브를 참조하자.
먼저 예를 들어 유저의 나이가 20살 이상이며, 성이 김씨 혹은 이씨로 시작하는 조건으로 조회를 한다고 생각해보자.
userRepository.findAll(QUser.user.age.goe(20).and(QUser.user.name.startsWith("김").or(QUser.user.name.startsWith("이"))))
이전처럼 querydsl을 쓴다면 위처럼 쓰고있었을것이다.
아니면 혹시 더 복잡한 방법으로 조회를 하고 있었을것이다.
하지만 위 Spring filter를 적용하게 된다면 API 요청시에 해당내용을 담아서 요청만 하면 된다.
GET api/v1/users?filter=age>:20 and (name~'김%' or name~'이%')
내생각엔 기존의 서비스코드보다 훨씬 심플하다.
쿼리의 WHERE절을 생각하고 쓰면 원하는 파라미터를 만드는데는 큰 시간이 필요하지 않을것이다.
위 예제에 쓴것 외에도 Operator는 not까지 3개이고 Comparator도 콜렉션까지 지원하며, 몇몇함수도 이미 만들어져있다.
적용법 및 자세한 사용법은 다음 이시간에... 깃허브 예제 봐주세요
'개발 > Back-end' 카테고리의 다른 글
Java to kotlin - 0. kotlin? (0) | 2022.12.28 |
---|---|
Springboot - QueryBinder (0) | 2022.12.28 |
`Spring cloud contract` 를 배워보자 (0) | 2020.08.14 |
JPA OneToMany EAGER 문제 및 해결방안 (0) | 2020.07.30 |
디자인 패턴 - 옵저버패턴(Observer pattern) with jdk (0) | 2019.07.11 |