본문 바로가기
Java

[Spring] JPA Specification Example

by parkjp 2019. 4. 2.

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);

}

 

반응형