Spring JPA Specification Simple Example
스프링 JPA Specification 예제
- Extended 'JpaSpecificationExecuter<T>' class
Repository 인터페이스에 JpaSpecificationExecutor 클래스를 extend 시켜주었다.
public interface UserRepository extends CrudRepository<User, String>, JpaSpecificationExecutor<User> {
}
- Created methods for criteria API
Specification<T> 객체를 리턴하는 메소드를 따로 구현하였다.
userId가 인자로 받은 id인 경우와 name이 인자로 받은 name인 경우(동등비교 equal)이다.
public static Specification<User> equalsId(String id) {
return ((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("id"), id));
}
public static Specification<User> equalsName(String name) {
return ((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("name"), name));
}
- Get all of users with a specific user Id or user name ( * Pageable class is for pagination)
서비스 단에서 위에서 만든 메소드들을 가지고 특정 userId 이거나 name인 쿼리를 실행한 경우이다. ( Pageable 클래스는 페이징을 위한 클래스로 추가해두었다. )
@Override
public Page<User> getAll(User user, Pageable pageable) {
return userRepository.findAll(Specification.where(supplier.equalsId(user.getId())).or(supplier.equalsName(user.getName())), pageable);
}
반응형
'Java' 카테고리의 다른 글
[Spring Boot] Logging 설정하기 (로그 설정) (0) | 2023.07.21 |
---|---|
SOLID (객체 지향 설계) (0) | 2022.02.21 |
[Java] 가비지 컬렉션(Garbage Collection, GC)과 알고리즘 (0) | 2017.09.08 |
[Java] JVM의 구조와 이해 (0) | 2017.09.08 |
[Java] 람다 표현식, 람다란? (0) | 2017.09.06 |