본문 바로가기

SPRING

[Spring Boot] 폼에서 데이터 받아서 DB에 저장(간단하게)/@ModelAttribute/타임리프 html 반복문

원래 숙제였는데

숙제하려고 찾아보니 일단 form데이터를 넣을 엔티티를 따로 만들고 

레포지토리도 따로만들고 

그걸 컨트롤러도 따로 만들고 이런식으로 어찌저찌해서 넣는거였다. 

 

아무래도 저게 정석이긴 한데

근데 코딩애플에서는 그걸 원하는게 아닌 간단한걸 원하는거같아서 

내가 만든건 기존item엔티티에 파라미터를 받는 생성자를 만들어주고

그걸 기존 itemController에서  생성한다음 거기에 파라미터 담아주고

기존 ItemRepository.save(생성자)해서 보내주었다. 이렇게 하니 잘됐다.

 

근데 알고보니 코딩애플에서는 이것보다 더더더더더더 간단한 기초방법을 알려주었다...당황...

 다른편에 나오는건가? 아님 이런식으로 진짜 겉만 알려주고 정석같은건 다른강의를 봐야하는걸까..?

어쩌면 내가 어렵게 생각했을수도 있고 ㅋㅋ 

 

 

내가 한 방법

@Entity
@ToString
@Setter
@Getter
@NoArgsConstructor
public class Item {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String title;
    private Integer price;

//밑에 추가 
public Item(String title,Integer price){
    this.title = title;
    this.price = price;
}

 

//itemController에 밑에 추가 

Item addItem = new Item(title,price);

 itemRepository.save(addItem);

 

 

코딩애플에서 알려준 방법

Item item = new Item;
item.setTitle(title);
item.setPrice(price);
itemRepository.save(item);

 

 

 

@ModelAttribute

사용자가 보낸 데이터를 한꺼번에 쉬벡 반환하고싶을때 

@ModelAttribute 클래스명 변수명 

이렇게 하면 new 클래스() 이것도 알아서 다 해주고 보낸 데이터들을 알아서 다 집어넣어준다. 

 

 

String addPost(@ModelAttribute Item item) {
    itemRepository.save(item);

 

th:fragment="원하는이름"

타임리프 html 반복문

예를들어 navbar 같은경우 여러 페이지에 똑같이 적용하고싶으면 타임리프 반복문 쓰면 됨

반복해서 넣어주고싶은 코드를 따로 빼서 따로 html파일을 만들고 (참고로 한 파일안에 여러개 생성가능)

반복해주고싶은 코드안에 th:fragment="원하는이름"

 

<div class="nav" th:fragment="navbar">
  <a class="logo">SpringMall</a>
  <a href="/list">List</a>
  <a href="/write">Write</a>
</div>

 

 

 

그리고 넣어줄 html에 다시가서 

 

th:replace="~{UI가 들어가있는 파일경로::아까작명한거} 

이제 계속 원하는곳에 이거 복붙해주면 됨. 

tip! 참고로 문법안에 변수전송도 가능 

장점 : 코드가 길어지지않고 

한번에 수정가능

 

<div th:replace="~{nav.html::navbar}"></div>