상품 주문 및 목록만들기(1)

노건우·2023년 9월 26일
0

Spring

목록 보기
8/22

스프링부트 애플리케이션 시작

 package com.codingbox.item;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ItemApplication {

	public static void main(String[] args) {
		SpringApplication.run(ItemApplication.class, args);
	}

}

SpringApplication.run(ItemApplication.class, args);: 이 부분은 Spring Boot 애플리케이션을 시작하는 코드이다.

dto 생성

package com.codingbox.item.domain.web.dto;

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class Item {
	private Long id;
	private String itemName;
	private Integer price;		// null일 수 있다.
	private Integer	quantity;	// null일 수 있다.
	
	public Item() {
		super();
	}
	
	public Item(String itemName, Integer price, Integer quantity) {
		super();
		this.itemName = itemName;
		this.price = price;
		this.quantity = quantity;
	}
	
}

lombok을 가져왔고 id,itemName,price,quantity로 구성

itemRepository

package com.codingbox.item.domain.web.repository;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.codingbox.item.domain.web.dto.Item;

@Repository
public class ItemRepository {
	private static final Map<Long, Item> store = new HashMap<>();
	private static long sequence = 0L;
	
	// 저장
	public Item save(Item item) {
		item.setId(++sequence);
		store.put(item.getId(), item);
		return item;
	}
	
	// 아이템 하나 검색
	public Item findById(Long id) {
		return store.get(id);
	}
	
	// 전체 항목
	public List<Item> findAll(){
		return new ArrayList<Item>(store.values());
	}
	
	// 아이템 수정
	public void update(Long itemId, Item updatParam) {
		// item 먼저 찾는다
		Item findItem = findById(itemId);
		findItem.setItemName(updatParam.getItemName());
		findItem.setPrice(updatParam.getPrice());
		findItem.setQuantity(updatParam.getQuantity());
	}
	
	// store clear
	public void clearStore() {
		store.clear();
	}
	
}

저장하기 위한 메서드들의 모임이다. save메서드에서 저장을 한다. 이때 id값이 하나씩 커지게 설정해 놓았다. ⭐(이걸 막는 과정도 html에서 구현하는데 조금 더 공부후 추가) 이거 아님 .
return "redirect:/basic/items/"+ item.getId();
}
이 코드를 통해서 redirect시켜서 계속 리셋시켜 인덱스가 올라가지 않게 하는 것
아이템을 찾는 메서드는 findById(하나만 검색), findAll(전체검색)으로 구성하였고 store라고 정의한 map 변수를 지우는 clearStore메서드로 마무리했다.

컨트롤러

✍️제일 중요한 컨트롤러 부분이다.
코드가 너무 길어서 조금씩 잘라서 첨부한다.

@GetMapping
	public String items(Model model) {
		List<Item> items = itemRepository.findAll();
		model.addAttribute("items", items);
		return "basic/items";
	}

일단 매핑을 해야한다. 위에서 정의해온 메서드를 끌고 오기위해 list객체를 생성했다.

@GetMapping("/{itemId}")
	public String item(@PathVariable Long itemId, Model model) {
		Item item = itemRepository.findById(itemId);
		model.addAttribute("item", item);
		return "basic/item";
	}

파라미터를 두 개로 가져오는데, @PathVariable 어노테이션을 사용하여 itemId 매개변수에 바인딩한다. 그리고 Model 객체를 매개변수로 받는다.
model.addAttribute("item", item); 이 부분은 Model 객체에 "item"이라는 이름으로 추가해 데이터를 사용할 수 있게 한다.

@GetMapping("/add")
	public String addForm() {
		return "basic/addForm";
	}

후에 있을 postmapping을 위해 getmapping해준다.

	@PostMapping("/add")
	public String saveItemV6(Item item,
			RedirectAttributes redirectAttributes) {
		Item savedItem = itemRepository.save(item);
		//redirectAttributes.addAttribute("itemId", savedItem);
		redirectAttributes.addAttribute("status", true);
		return "redirect:/basic/items/"+ item.getId();
	}

postmapping으로 데이터를 요청한다. 기존 레파지토리에서 save메서드를 호출해 저장 하고
redirect:"를 사용하여 리다이렉트를 수행한다. "/basic/items/{item.getId()}"로 리다이렉트된다. 이때 {item.getId()}는 새로 생성된 아이템의 ID를 나타내는데, 따라서 아이템이 성공적으로 생성되면 해당 아이템의 상세 페이지로 이동하게 설정해 놓았다.

<script th:inline="javascript">
		if([[${param.status}]]){
			alert("저장완료");
		}else{
			alert("저장실패");
		}
	</script>

후에 파라미터로 받아와서 요긴하게 사용한다.

profile
초보 개발자 이야기

0개의 댓글

관련 채용 정보