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) 사용