비즈니스 파악(화면 보자!)

reply 테이블에 필요한것
boardId:게시물 작성자 (어떤 게시물에 댓글인지 파악하려고 넣음)
comment:댓글 쓰기 칸, 내용
userId:댓글 작성자
id:댓글 갯 수
create at :댓글 생성 시
1. 테이블 생성
package shop.mtcoding.blog.reply;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import java.time.LocalDateTime;
@Table(name="reply_tb")
@Data
@Entity
public class Reply {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String comment;
private int userId;
private int boardId;
private LocalDateTime createdAt;
}
board_id를 body로 받기
2. 비지니스 파악 (그림 살펴보기)


type="hidden"
:
◦ <input>
요소의 type
속성은 입력 필드의 유형을 지정합니다.
◦ type="hidden"
은 사용자에게 보이지 않는 숨겨진 필드를 생성합니다.
◦ 사용자의 입력을 받지 않고, 서버로 데이터를 전송할 때 유용하게 사용됩니다.
name="boardId"
:
◦ <input>
요소의 name
속성은 입력 필드의 이름을 지정합니다.
◦ 서버로 전송될 데이터의 이름을 나타냅니다.
◦ 이 경우, boardId
라는 이름으로 데이터가 전송될 것입니다.
value="{{board.id}}"
:
◦ <input>
요소의 value
속성은 입력 필드의 값을 지정합니다.
◦ 이 값은 서버로 전송되는 데이터의 실제 값입니다.
◦ {{board.id}}
는 템플릿 엔진이나 서버 사이드 코드에서 동적으로 해당 값을 채워넣는 부분입니다.
◦ 이 경우, board
객체의 id
속성 값이 해당 필드의 값으로 사용될 것입니다.
결론:어떤 게시물에 댓글이 달릴지 정하기 위해 이 코드가 쓰여짐3. DTO 만들기
package shop.mtcoding.blog.reply;
import lombok.Data;
public class ReplyRequest {
@Data
public static class WriteDTO {
private String comment;
private int boardId;
}
}
4. 컨트롤러 만들기
값 제대로 들어오는지 확인
package shop.mtcoding.blog.reply;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
@RequiredArgsConstructor
@Controller
public class ReplyController {
private final HttpSession session;
@PostMapping("reply/save")
public void write(ReplyRequest.WriteDTO requestDTO){
System.out.println(requestDTO);
}
}

package shop.mtcoding.blog.reply;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import shop.mtcoding.blog.user.User;
// 댓글쓰기, 댓글삭제, 댓글 목록보기
@RequiredArgsConstructor
@Controller
public class ReplyController {
private final HttpSession session;
private final ReplyRepository replyRepository;
@PostMapping("/reply/save")
public String write(ReplyRequest.WriteDTO requestDTO){
System.out.println(requestDTO);
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) {
return "redirect:/loginForm";
}
// 유효성 검사 (님들이 하세요)
// 핵심 코드
replyRepository.save(requestDTO, sessionUser.getId());
return "redirect:/board/"+requestDTO.getBoardId();
}
}
5. 레포지토리 만들기
package shop.mtcoding.blog.reply;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import shop.mtcoding.blog.board.Board;
import shop.mtcoding.blog.board.BoardRequest;
import shop.mtcoding.blog.board.BoardResponse;
import java.util.List;
@RequiredArgsConstructor
@Repository
public class ReplyRepository {
private final EntityManager em;
@Transactional
public void save(ReplyRequest.WriteDTO requestDTO, int userId) {
Query query = em.createNativeQuery("insert into reply_tb(comment, board_id, user_id, created_at) values(?,?,?, now())");
query.setParameter(1, requestDTO.getComment());
query.setParameter(2, requestDTO.getBoardId());
query.setParameter(3, userId);
query.executeUpdate();
}
}
Share article