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 | 29 | 30 |
Tags
- Python
- 오블완
- Codeup
- spring security
- 파이썬
- 기초100제
- mariadb
- Spring Boot
- Postman
- Git
- Spring
- 롬복
- Gradle
- java
- JPA
- H2 설치
- 객사오
- 클린 코드
- 알고리즘
- 티스토리챌린지
- thymeleaf
- golang
- GitHub
- 클린코드
- 코드업
- Vue.js
- springboot
- go
- 스프링
- MySQL
Archives
- Today
- Total
nyximos.log
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 08 글 삭제 본문
Programming/Spring Boot
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 08 글 삭제
nyximos 2022. 8. 29. 19:59Spring Boot + Gradle + MySQL + JPA + Thymeleaf 환경에서 간단한 CRUD 예제를 만들어보자
이번 포스팅에서는 게시물 삭제를 구현해보자.
주요 기능
회원가입
로그인
게시글 등록
게시글 수정
게시글 삭제
게시글 조회 (일반 회원 조회수와 운영자 회원 조회수 따로 구분)
게시글 추천
detail.html
body 태그 하단에 아래와 같은 스크립트를 작성한다.
<th:block layout:fragment="script">
<script th:inline="javascript">
$(document).ready(function () {
/*<![CDATA[*/
var id = /*[[${post.id}]]*/'';
var memberId = /*[[${post.memberId}]]*/'';
$('#remove').click((event) => {
if (localStorage.getItem('id') != memberId) {
alert('권한이 없습니다');
} else {
const path = 'http://localhost:8086/api/posts/' + id;
$.ajax({
url: path,
type: 'DELETE',
contentType: 'application/json',
}).done((result) => {
console.log(result);
if (response == 'success') {
alert('삭제 성공')
location.href = "http://localhost:8086"
} else {
alert(result);
}
});
}
})
});
/*]]*/
</script>
</th:block>
CDATA
character data를 의미
일반 문자 데이터를 의미한다.
타임리프 변수를 script 태그 내에 사용하려면 아래 코드 안에서 명시한다.
타임리프 변수는 /*[[${ }]]*/ 로 감싸준다.
<script th:inline="javascript">
/*<![CDATA[*/
/*]]*/
</script>
이렇게 쓰면 안된다. 조심하자
<script type="text/javascript">
현재 서버에서 memberId는 내려주지 않기 때문에 코드를 수정해보자.
DetailDTO
필드에memberId를 추가해준다.
@Getter
@Setter
@Builder
public class DetailDTO {
private Long id;
private String title;
private String content;
@DateTimeFormat(pattern = "yyyy-MM-dd`T`HH:mm:ss")
private LocalDateTime createdAt;
@DateTimeFormat(pattern = "yyyy-MM-dd`T`HH:mm:ss")
private LocalDateTime updatedAt;
private int userViews;
private int adminViews;
private int likes;
private String memberId;
private String memberName;
}
BoardServiceImpl
getDetail(Long id, String memberId) 메소드에서 DTO 생성 부분에 memberId를 추가해주자.
DetailDTO detailDTO = DetailDTO.builder()
.id(boardEntity.getId())
.title(boardEntity.getTitle())
.content(boardEntity.getContent())
.createdAt(boardEntity.getCreatedAt())
.updatedAt(boardEntity.getUpdatedAt())
.userViews(boardEntity.getUserViews())
.adminViews(boardEntity.getAdminViews())
.memberId(member.getId())
.memberName(member.getName())
.build();
BoardService
ResponseEntity remove(Long id);
BoardServiceImpl
remove(Long id)를 구현해주자.
@Override
public ResponseEntity remove(Long id) {
boardRepository.deleteById(id);
return new ResponseEntity("success", HttpStatus.OK);
}
deleteById(Id id)
Spring Data JPA에서 제공하는 메소드
내부적으로 delete를 호출한다.
id 값이 null인 경우 EmptyResultDataAccessException을 발생시킨다.
ApiController
@DeleteMapping("/posts/{id}")
public ResponseEntity remove(@PathVariable Long id) {
ResponseEntity responseEntity = boardService.remove(id);
return responseEntity;
}
이전 게시글들에서 충분히 설명했으므로 자세한 내용은 생략한다.
서버를 실행해서 삭제가 되는지 확인해보자.
'Programming > Spring Boot' 카테고리의 다른 글
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 09 글수정 (27) | 2022.09.05 |
---|---|
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 07 글 조회, 링크연결 (0) | 2022.08.26 |
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 06 글 등록 (0) | 2022.08.26 |
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 05 로그인, 로그아웃 구현 (2) | 2022.08.16 |
Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 04 타임리프 레이아웃, 회원가입 구현 (5) | 2022.08.12 |