1. 프로젝트 생성과 설정
✔ build.gradle과 application.properties 설정은 지난 포스트와 동일
2023.11.28 - [Framework/SpringBoot] - [Spring Boot] JPA Repository
[Spring Boot] JPA Repository
1. 프로젝트 생성 및 설정 1) bulid.gradle 2) application.properties server.port = 8081 # JSP spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp # oracle set spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasou
100ke.tistory.com
▶ 설정 부분 참고
2. 코드 작성
위의 구조로 작성하겠습니다.
1) DTO
toEntity() 메서드는 게시글 등록시에 id는 db에서 자동생성되므로 null로 지정하고, 게시글을 수정할 때는 id로 변경한다.
@AllArgsConstructor
@ToString
public class ArticleForm {
private Long id;
private String title;
private String content;
public Article toEntity() {
return new Article(null, title, content);
}
}
2) Entity
@Entity
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
public class Article {
@Id
@GeneratedValue // db가 id를 자동 생성
private Long id;
@Column
private String title;
@Column
private String content;
}
3) Repository
interface ArticleRepository
@Repository
public interface ArticleRepository extends CrudRepository<Article, Long>{
@Override
ArrayList<Article> findAll();
}
4) Controller
@Controller
public class ArticleController {
@Autowired
private ArticleRepository articleRepository;
@GetMapping("/articles/new")
public String newArticleForm() {
return "/articles/new";
}
@PostMapping("/articles/create")
public String newArticle(ArticleForm form) {
// dto를 엔티티로 변환
Article article = form.toEntity();
// repository에 엔티티 저장
Article saved = articleRepository.save(article);
return "redirect:/articles/" + saved.getId();
}
@GetMapping("/articles/{id}")
public String show(@PathVariable Long id, Model model) {
Article articleEntity = articleRepository.findById(id).orElse(null);
model.addAttribute("article", articleEntity);
return "articles/show";
}
@GetMapping("/articles")
public String index(Model model) {
List<Article> articleEnList = articleRepository.findAll();
model.addAttribute("list", articleEnList);
return "articles/index";
}
@GetMapping("/articles/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
Article articleEntity = articleRepository.findById(id).orElse(null);
model.addAttribute("id", id);
model.addAttribute("article", articleEntity);
return "articles/edit";
}
@PostMapping("/articles/update")
public String update(ArticleForm form) {
Article articleEntity = form.toEntity();
Article target = articleRepository.findById(articleEntity.getId()).orElse(null);
if(target != null) {
articleRepository.save(articleEntity);
}
return "redirect:/articles/" + articleEntity.getId();
}
@GetMapping("/articles/{id}/delete")
public String delete(@PathVariable Long id, RedirectAttributes rttr) {
Article target = articleRepository.findById(id).orElse(null);
if(target != null) {
articleRepository.delete(target);
rttr.addFlashAttribute("msg", "데이터 삭제");
}
return "redirect:/articles";
}
}
3. 화면 처리 및 구동 확인
1) index.jsp
서버 처음 구동 시 DB에 테이블이 생성된 것을 확인할 수 있다.
2) new.jsp
3) show.jsp
4) edit.jsp
작성된 게시글 수정 전에 [com.study.springboot.dto] 패키지의 ArticleForm 을 다음과 같이 수정
5) 삭제
게시글 삭제는 따로 화면에 나타내는 페이지는 없으며 url주소에 삭제할 게시글의 id 번호를 입력받아 삭제한다.
'Framework > SpringBoot' 카테고리의 다른 글
[Spring Boot] File Upload 구현하기 ① (0) | 2023.12.20 |
---|---|
[Spring Boot] CrudRepository, RestController (0) | 2023.11.30 |
[Spring Boot] JPA Repository (0) | 2023.11.28 |
[Spring Boot] JPA로 CRUD 적용하기 (0) | 2023.11.27 |
[Spring Boot] JPA 사용하기② (1) | 2023.11.23 |