inblog logo
|
goho
    스프링부트

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

    gov's avatar
    gov
    Nov 25, 2024
    [게시판/JPA]스프링 익명블로그v3
    Contents
    왜 JPA?주요 키워드 활용 및 배운 것코드
    💡
    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

        RSS·Powered by Inblog