일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 리액트
- 알고리즘
- 프로세스
- 자바알고리즘
- SpringBoot
- 소셜로그인구현
- 자바의정석
- 혼공컴운
- 프로그래머스
- 프로그래머
- 자바개발자
- React
- 개발자일기
- Codeup
- 스프링부트
- 운영체제
- db
- 자바
- 백엔드
- 백엔드개발자
- 자바스크립트
- 개발자
- 국비지원코딩
- 국비지원
- 미라클모닝
- 프로그래밍
- 코딩
- 데이터베이스
- 코드업
- Java
- Today
- Total
초코딩(chocoding)
[Project - 게시판 / spring boot] board Insert / board Update / board Detail / 게시글 수정한 시간 테이블에 담기 / 논리적 삭제란? 본문
[Project - 게시판 / spring boot] board Insert / board Update / board Detail / 게시글 수정한 시간 테이블에 담기 / 논리적 삭제란?
sweetychocoding 2024. 2. 19. 22:39오늘은 insert와 update, detail까지 구현했다.
사실 주말 전에 insert를 마쳤고
주말동안 회고쓰는 것을 깜빡해서
오늘 구현한 update, detail과 같이 적는다
(저번주 금요일에 점심을 3시간동안 먹어버려서 insert 하나 구현함...... )
어쨌든 crud는 별로 설명할게 없기 때문에
게시글을 수정한 시간을 테이블에 담는 것만
알려주도록 하겠다.
근데 insert 문에서 오류가 있었는데
db에서 board_delyn (논리적 delete를 위한 컬럼)의 속성을
default와 not null을 주었음에도 불구하고
default value가 db에 저장이 되지 않았다.
하지만 이상하게도 int 타입은 아무 문제 없이 저장이 되었다.
이것을 해결하기 위해 1시간정도..... 삽질을 했고
직접 필드 주입을 해주었다.
하지만 spring boot에서 가장 적합한 의존성 주입 방식은
"생성자 주입" 이다.
그래서 다시 생성자 주입으로 바꿔주었다.
이게 gpt의 의견인데
솔직히 내가 원하는 100% 답은 아닌 것 같다.
다른 이유가 분명 있었는데......
까먹어버렸다.
(하핫?)
내일 스터디 그룹에 가서
물어봐야지
(중요도 100%%%%%%%%)
따라서 코드는 다음과 같다.
Insert
// Insert =====================================================
@GetMapping("/boardInsert")
public void getBoardInsert() {
} // getBoardInsert()
@PostMapping("/boardInsert")
public String postBoardInsert(RedirectAttributes rttr, Board entity) {
String uri = "redirect:boardPage";
entity.setBoard_delyn('N');
entity.setBoard_regdate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
try {
if (boardService.save(entity) > 0) {
rttr.addFlashAttribute("message", "board insert success");
} else {
rttr.addFlashAttribute("message", "board insert fail");
uri = "board/boardInsert";
}
} catch (Exception e) {
uri = "board/boardInsert";
rttr.addFlashAttribute("message", "board insert fail");
System.out.println("BoardInsert Exception => " + e.toString());
}
return uri;
} // postBoardInsert()
Update
// Update =====================================================
@PostMapping("/boardUpdate")
public String postBoardUpdate(Model model, Board entity, RedirectAttributes rttr) {
String uri = "redirect:boardDetail?board_id=" + entity.getBoard_id();
try {
entity.setBoard_moddate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
if (boardService.save(entity) > 0) {
//rttr.addFlashAttribute("boardDetail", entity);
rttr.addFlashAttribute("message", "Board Update Success");
} else {
model.addAttribute("message", "Board Update Fail");
uri = "board/boardUpdate";
}
} catch (Exception e) {
System.out.println("Board Update Exception => " + e.toString());
uri = "board/boardUpdate";
}
return uri;
} // postBoardUpdate()
나는 게시글이 등록된 날짜/시간, 수정된 날짜/시간, 삭제된 날짜/시간을 DB를 설계할 때 컬럼으로 만들었기 때문에
수정 버튼이 눌리고 UPDATE가 되면 수정된 날짜가 DB에 저장되게 된다.
Detail
// Detail =====================================================
@GetMapping("/boardDetail")
public String getBoardDetail(Model model, Board entity, HttpServletRequest request) {
model.addAttribute("boardDetail", boardService.selectDetail(entity.getBoard_id()));
if ("U".equals(request.getParameter("jCode"))) {
return "board/boardUpdate";
} else {
return "board/boardDetail";
}
} // getBoardDetail()
.
.
.
지금은 DELETE 구현중인데
팀프로젝트 때 했던 방식과 다르게 논리적 삭제를 하려고 한다.
(팀플 때도 이렇게 했었어야 됐는데..... 할 일은 많고... 이미 테이블 다 만들어서 하려면 다 갈아 엎어야 하고.... 하핫)
여기서 !!
논리적 삭제란 ?
=> 클라이언트가 삭제 버튼을 눌렀을 때 실제로 DB의 값이 삭제되는 것이 아닌
DB에는 삭제된 날짜나 시간 또는 삭제 여부만 저장이 되고
클라이언트 측에서만 삭제된 것처럼 구현 하는 것을 말한다.
(즉, DB값은 살아있음)
어쨌든.... 구현 중이긴한데요....
지금 ................... 뭐가 안돼서 오늘 회고를 쓰지는
못 할 것 같습니다............
내일 쓰도록 할게요
빠잉