Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 유니티기초
- 스프링부트 미니프로젝트
- JS기초
- 타입스크립트 기초문법
- 스프링게시판프로젝트
- 스프링부트 블로그
- typescript 기초문법
- springboot 게시판 프로젝트
- 스프링부트 회원가입
- 파이썬 괄호 회전하기
- 스프링부트 update
- springboot 게시판만들기
- 스프링부트 게시판만들기
- 유니티
- 타입스크립트 기초
- 프로그래머스 괄호 회전하기 python
- springboot 사이드프로젝트
- jpa 게시판
- 스프링 게시판 만들기
- springboot 게시판
- spring jpa 게시판
- springboot 미니프로젝트
- 스프링부트 블로그만들기
- 파이썬 기초
- 괄호 회전하기 파이썬
- 유니티Cube
- 타입스크립트 기본문법
- spring jpa 사이드프로젝트
- python 괄호 회전하기
- 유니티Material
Archives
- Today
- Total
Digking's cave
SpringBoot 게시판 만들기 프로젝트 (3) - 게시글 작성 후 DB에 게시글 등록하기 본문
Spring/SpringBoot 게시판 프로젝트
SpringBoot 게시판 만들기 프로젝트 (3) - 게시글 작성 후 DB에 게시글 등록하기
디깅 2023. 7. 17. 21:24728x90
안녕하세요.
오늘은 게시글을 작성하는 서비스를 작성하였습니다.
해당 내용은 유튜브 코딩레시피 강사님의 유튜브 강의를 수강 후 개인적으로 요약정리 하였습니다.
index.html
글작성 버튼 생성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<button onclick="saveReq()">글작성</button>
<a href="/board/save">글작성(링크)</a>
</body>
<script>
// function saveReq() {
//
// }
const saveReq = () => {
location.href = "/board/save";
}
</script>
</html>
save.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>save</title>
</head>
<body>
<!-- front 부분은 되도록이면 복사 붙여넣기 해주세요 -->
<!-- action속성: 목적지(서버주소), method속성: http request method(get, post) -->
<form action="/board/save" method="post" enctype="multipart/form-data">
writer: <input type="text" name="boardWriter"> <br>
pass: <input type="text" name="boardPass"> <br>
title: <input type="text" name="boardTitle"> <br>
contents: <textarea name="boardContents" cols="30" rows="10"></textarea> <br>
<input type="submit" value="글작성">
</form>
</body>
</html>
- action 속성 : 목적지(서버 주소)
- method 속성 : http request method (get, post)
BoardController.java
@GetMapping("/save")
public String saveForm() {
return "save";
}
@PostMapping("/save")
public String save(@ModelAttribute BoardDTO boardDTO) throws IOException {
System.out.println("boardDTO = " + boardDTO);
boardService.save(boardDTO);
return "index";
}
saveForm()은 버튼을 눌렀을 때, 글 작성 화면으로 이동
save()는 실제로 글을 저장 후 index화면으로 이동
BoardDTO.java
- DTO(Data Transfer Object) 데이터 전달하는 객체
- Lombok을 통해 자동으로 get / set을 사용 가능
@Getter
@Setter
@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;
public BoardDTO(Long id, String boardWriter, String boardTitle, int boardHits, LocalDateTime boardCreatedTime) {
this.id = id;
this.boardWriter = boardWriter;
this.boardTitle = boardTitle;
this.boardHits = boardHits;
this.boardCreatedTime = boardCreatedTime;
}
BoardEntity.java
package com.testboard.board.entity;
import com.testboard.board.dto.BoardDTO;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.*;
@Entity
@Getter
@Setter
@Table(name = "board_table")
public class BoardEntity extends BaseEntity {
@Id //pk 컬럼 지정 (필수요소)
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto-increment
private Long id;
@Column(length = 20, nullable = false) // 크기 20, not null
private String boardWriter;
@Column // 크기 255, null 가능
private String boardPass;
@Column
private String boardTitle;
@Column(length = 500)
private String boardContents;
@Column
private int boardHits;
public static BoardEntity toSaveEntity(BoardDTO boardDTO) {
BoardEntity boardEntity = new BoardEntity();
boardEntity.setBoardWriter(boardDTO.getBoardWriter());
boardEntity.setBoardPass(boardDTO.getBoardPass());
boardEntity.setBoardTitle(boardDTO.getBoardTitle());
boardEntity.setBoardContents(boardDTO.getBoardContents());
boardEntity.setBoardHits(0);
return boardEntity;
}
}
toSaveEntity 는 DTO의 값을 Entity로 옮겨담는것
BaseEntity.java
시간 관련 값들은 별도 Entity로
package com.testboard.board.entity;
import lombok.Getter;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
public class BaseEntity {
@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdTime;
@UpdateTimestamp
@Column(insertable = false)
private LocalDateTime updatedTime;
}
BoardService.java
package com.testboard.board.service;
import com.testboard.board.dto.BoardDTO;
import com.testboard.board.entity.BoardEntity;
import com.testboard.board.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
// DTO > ENTITY (Entity class)
// ENTITY > DTO (DTO class)
// 변환하는 작업을 주로 service에서 한다
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
public String save(BoardDTO boardDTO) {
BoardEntity boardEntity = BoardEntity.toSaveEntity(boardDTO);
boardRepository.save(boardEntity); // insert문이 실행된다
return "index";
}
}
반응형
'Spring > SpringBoot 게시판 프로젝트' 카테고리의 다른 글
SpringBoot 게시판 만들기 프로젝트 (2) - 개발환경 세팅 / SpringBoot 프로젝트 생성 / application.yml 설정하기 (1) | 2023.07.10 |
---|---|
SpringBoot 게시판 만들기 프로젝트 (1) - SpringBoot / JPA / MySQL (0) | 2023.07.10 |