[게시판/JPA]스프링 익명블로그v3

gov's avatar
Nov 25, 2024
[게시판/JPA]스프링 익명블로그v3
💡
nativeQuery로 만든 스프링 익명 블로그 기능을 JPA(Java Persistence API)로 변경한 코드

왜 JPA?

      주요 키워드

      • JPQL 객체 지향 쿼리
      • 영속성persist 컨텍트

      활용 및 배운 것

       

      코드

      Board

      어노테이션 추가
      • @AllArgsConstructor: 클래스의 모든 필드 값을 파라미터로 받는 생성자 자동 생성
      • @CreationTimestamp: INSERT 쿼리 발생 시, 현재 시간을 값으로 채워 쿼리 생성
      • update 메서드 추가: 매개 변수로 전달 받은 title, content을 필드의 title, content 값으로 변경
      @AllArgsConstructor @NoArgsConstructor @Getter @Table(name = "board_tb") @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String title; private String content; @CreationTimestamp private Timestamp createdAt; // 업데이트 메서드 public void update(String title, String content) { this.title = title; this.content = content; } }

      BoardController

      • 게시글쓰기
      @GetMapping("/board/save-form") public String saveForm() { return "save-form"; } @PostMapping("/board/save") public String saveV2(BorderRequest.SaveDTO saveDTO) { boardService.게시글쓰기(saveDTO); return "redirect:/"; }

      BoardService

      • 게시글수정하기: JPA의 더티 체킹에 의한 자동 상태 변경 방식 적용
        • @Transactional public void 게시글수정하기(int id, BorderRequest.UpdateDTO updateDTO) { Board board = boardRepository.findById(id) .orElseThrow(() -> new RuntimeException("해당 id의 게시글이 없습니다 : " + id)); board.update(updateDTO.getTitle(), updateDTO.getContent()); } // 영속화된 객체상태변경 - update + commit => 더티체킹
      • 게시글수정화면보기 findById()에서 Optional을 이용한 처리 로직 추가 orElseThrow() 으로 해당 게시글이 존재하지 않을 경우 예외를 던짐
      public BoardResponse.UpdateFormDTO 게시글수정화면보기(int id) { Board board = boardRepository.findById(id) .orElseThrow(() -> new RuntimeException("해당 id의 게시글이 없습니다 : " + id)); return new BoardResponse.UpdateFormDTO(board); }
       
      Share article

      goho