지난글: https://cooookieeee.tistory.com/36
(0) POST로 받은 데이터 Entity로 변환하기
#1 POST /board/save 요청 처리할 controller 메서드 생성하기
@PostMapping("/save") // METHOD:POST일 시 들어오는 요청 처리
public String save(@ModelAttribute BoardDTO boardDTO){// body로 넘겨준 값을 boardDTO로 변환한다
boardService.save(boardDTO);// boardService의 save함수를 통해 Entity로 변환하여 DB에 INSERT
return "save";
#2 BoardService. save 메서드 생성
-1. Service 패키지 생성
-2. BoardService Class 생성
-3 save 매서드 생성 및 구성
@Service // Service 클래스라는 것을 명시
@RequiredArgsConstructor // BoardRepository 인터페이스 클래스 변수 할당에 대한 의존성 주입
public class BoardService {
private final BoardRepository boardRepository;
public void save(BoardDTO boardDTO) {// 매개변수로 BoardDTO
BoardEntity boardEntity = BoardEntity.toSaveEntity(boardDTO);// BoardDTO의 BoardEntity화
boardRepository.save(boardEntity);// BoardRepository의 save매서드를 통해 Entity를 INSERT
#3 BoardDTO Class와 BoardEntity class 구성하기
-BoardDTO
@Getter// 읽기 전용 데이터를 제공하거나, 값을 외부로 노출할 때 사용. ex(String name -> getname())
@Setter// 외부에서 값을 변경할 수 있도록 쓰기 권한을 부여할 때 사용. ex(String name -> setname())
@ToString// 클래스의 필드 값을 기반으로 객체를 문자열로 표현하는 toString() 메서드를 자동 생성
@NoArgsConstructor// 기본생성자
@AllArgsConstructor// 모든 필드를 매개변수로 하는 생성자
public class BoardDTO {
private Long id;
private String boardWriter;
private String boardPass;
private String boardTitle;
private String boardContents;
private int boardHits;
private LocalDateTime boardCreatedTime;
private LocalDateTime boardUpdatedTime;
-BoardEntity
@Entity // 이클래스가 Entity클래스임을 명시
@Getter
@Setter
@Table(name = "Board_table") // 이 클래스로 생성된 Entity와 상호작용할 DB의 테이블을 명시
public class BoardEntity {
@Id// pk 컬럼 지정. 필수
@GeneratedValue(strategy = GenerationType.IDENTITY)// auto_increment
private Long Id;
@Column(length = 30, nullable = false)// 크기 20 not null
private String boardWriter;
@Column // 크기 255 null 가능
private String boardTitle;
@Column
private String boardPass;
@Column(length = 500)
private String boardContents;
@Column
private int boardHits;
public static BoardEntity toSaveEntity(BoardDTO boardDTO) { // DTO를 Entity로 변환
BoardEntity boardEntity = new BoardEntity();
boardEntity.setBoardWriter(boardDTO.getBoardWriter()); Getter Setter를 이용하여 객체 변수를 가져와서 객체 변수에 저장
boardEntity.setBoardPass(boardDTO.getBoardPass());
boardEntity.setBoardTitle(boardDTO.getBoardTitle());
boardEntity.setBoardContents(boardDTO.getBoardContents());
boardEntity.setBoardHits(0);
return boardEntity;
}
}
이를 통해 Controller를 통해 들어온 DTO 객체가 BoardService.save에서 호출된 메서드를 통해 Entity객체로 변환함
이후 Repoistory 인터페이스를 통해 Entity관련된 트랜잭션을 DB의 쿼리로 변환해 수행한다.
(1) BoardRepository를 이용해서 Mysql 서버와 상호작용하기
#1 BoardRepository 구성
-마지막 BoardService에 있던 BoardRepository.save()를 수행하기 위해 Repository interface를 생성한다.
- Repository 패키지 생성한 뒤 BoardRepository 인터페이스를 생성한다.
// JpaRepository의 상위 인터페이스를 상속받아 Jpa 기능을 수행한다.
// <BoardEntity, Long> 제네릭을 통해 BoardEntity 타입과 Long 타입의 id를 받아올 것을 명시한다.
public interface BoardRepository extends JpaRepository<BoardEntity, Long> {
}
// 알아야할 점: 일부 쿼리는 JpaRepository통해 생성된 매서드로 사용가능하다.(ex: BoardRepository.save())
(2) 어플리케이션 서버 실행 후 글 작성 및 DB Insert 확인
- application.yml 의 정보를 통해 DB와 연결되어 동적 기능을 수행한다.
- Gradle을 통해 빌드 후 Application을 수행해보자.
- http://localhost:port/board/save로 이동 시 위와 같은 페이지가 뜬다.
- 빈칸을 임의로 채우고 글작성 버튼을 눌러보자
- 위와 같이 table이 생성되고 튜플이 생성된 것을 확인 가능하다.
참고: https://www.youtube.com/watch?v=2XEEPdQBKfs&list=PLV9zd3otBRt7jmXvwCkmvJ8dH5tR_20c0&index=4
'공부 > Java' 카테고리의 다른 글
#API# Spring의 API 생성 방식과 Model (0) | 2024.11.26 |
---|---|
#의존성 2# Spring의 의존성 주입 기능 (0) | 2024.11.25 |
#의존성 1#의존성 주입이란? (0) | 2024.11.25 |
#개인 프로젝트 2# 프로젝트 생성,MYSQL과 연결하기, Controller-View 연결 (0) | 2024.11.22 |
#개인 프로젝트1# Spring Boot로 게시판 웹서비스 만들기 (2) | 2024.11.22 |