Spring MVC패턴으로 간단한 쇼핑몰 만들어보자!

박경현·2023년 4월 3일
0

지금까지 배운 내용을 토대로 간단하게 Spring MVC 패턴으로 쇼핑몰을 만들어보았다

데이터베이스도 따로 쓰지 않는 간단한 설계로 진행했다!!

유저 흐름 설계 내용!

  1. 유저가 들어오면 가장먼저 상품 목록을 볼 수 있다
  2. 상품 등록 버튼 누르면 상품 등록 Form으로 이동!
  3. 상품 등록하면 저장 후 상품 상세 페이지로 이동!
  4. 상품 상세에서 상품 수정하면 edit Form으로 이동!
  5. 수정 완료 누르면 상품 상세페이지로 이동!

코드로 보기!

Domain/Item => 여기에 모델을 구현해놓음!

@Data
public class Item {
	private Long id;
    private Integer price; //가격이 안정해 졌을때 null로 놔둘수 있게!
    private Integer quantity;
}
public Item() {
	
}
public Item(String itemName, Integer price, Integer quantity) {
	this.itemName = itemName;
    this.price = price;
    this.quantity = quantity;
}

Domain/ItemRepository => 여기에 조회 및 수정, 입력 가능 함수들 만들기

@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 itemId) { return store.getId(itemId); }
   
   public List<Item> findAll(){
   	return new ArrayList<>(store.values);
   }
   public void update(Long itemId, Item updateParam) {
   	Item findItem = store.get(itemId);
       findItem.setItemName(updateParam.getItemName());
       findItem.setPrice(updateParam.getPrice());
       findItem.setQuantity(updateParam.getQuantity());
       
   }
   public void clearStore() {store.clear(); }
}

web/basic/BasicItemController - url을 매핑해서 view를 호출 및 model을 입력 및 조회

@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor

public class BasicItemController {
	private final ItemRepository itemRepository;
    
    @GetMapping
    public String items(Model model) {
    	List<Item> items = itemRepository.findAll();
        model.addAttribute("items", items);
        return "basic/items";
    }
    
    @GetMapping("/{itemId})
    public String items(@PathVariable long itemId ,Model model) {
    	List<Item> items = itemRepository.findById(itemId);
        model.addAttribute("item", item);
        return "basic/item";
    }
    @GetMapping("/add")
    public String addForm(){
    	return "basic/addForm";
    }
    
    @PostMapping("/add")
    public String addItemV4(Item item, RediredctAttributes redirectAttributes) {
    	Item savedItem = itemRepository.save(item);
        redirectAttributes.addAttribute("itemId", savedItem.getId());
        redirectAttributes.addAttribute("status", true);
        return "redirect:/basic/items/{itemId};
    }
    
    @GetMapping("/{itemId}/edit")
    public String editForm(@PathVariable Long itemId, Model model) {
    	Item item= itemRepository.findById(itemId);
        model.addAtribute("item", item);
        return "basic/editForm";
    }
    
    @PostMapping("/{itemId}/edit")
    public String edit(@PathVariable Long itemId, @ModelAttribute Item item ) {
        itemRepository.update(itemId,item);
        // view템플릿을 호출하는 대신에 리다이렉트를 호출!!
        // controller에서 저 부분을 찾아서 가게 됨!
        return "redirect:/basic/items/{itemId}";
    }
    
}

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글