Spring
Spring JPA(5) 게시판
JeonInwoo
2020. 2. 18. 17:40
github : https://github.com/hodolee246/intellij-on-my-own/tree/master/demo
Specification
Specification을 적용하기 위해서는 Repository에 JpaSpecificationExecutor<T> 인터페이스를 추가로 상속받아야 한다.
public interface BoardRepository extends JpaRepository<Board, Long>, JpaSpecificationExecutor<Board> {
Page<Board> findAll(Specification<Board> specification, Pageable pageable);
}
Specification 클래스를 자신의 검색 조건에 맞게 재정의 해준다.
Predicate (criteria에서 제공하는 클래스)
Specification 참고 블로그 : https://javacan.tistory.com/entry/SpringDataJPA-Specifcation-Usage
public class BoardSpecification {
public static Specification<Board> boardLike(String category, String keyword) {
return ((root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (category.equals("writer") || category.equals("content") || category.equals("title")) {
predicates.add(criteriaBuilder.like(root.get(category), "%" + keyword + "%"));
}
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
});
}
}
프로그램 구조
Member (Controller - Service - Repository - Model)
Board (Controller - Service - Repository - Model)
DB : mySQL
IDE : Intellij
프로그램 설명
- JPA Specification을 이용하여 게시판 대한 CRUD 설계
- 기존의 사용하던 Autowired가 아닌 final을 이용한 의존성 코드설계
- @PrePersist, @PreUpdate 를 사용한 Insert, Update시 해당 시간입력 코드설계
- JSONObject 및 GSON(JSON to DTO) 사용