본문 바로가기

스프링부트(Spring Boot)

Item CRUD작업

CRUD

 - Create : Post

 - Read : Get

 - Update : Put

 - Delete : Delete

1. 특정 id를 통해 그 아이템 정보 불러오기

@RestController
@RequestMapping("/item/api")
public class ItemController {

    @GetMapping("/id/{id}")
	public ResponseEntity<?> findById(@PathVariable("id") long id) {

		Map<String, Object> map = new HashMap<>();

		try {
			ItemDTO dto = itemService.findById(id);
			map.put("itemDTO", dto);
			return ResponseEntity.ok().body(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("err", e.getMessage());
			return ResponseEntity.badRequest().body(map);
		}
	}
}
@Service
public class ItemService {

	public ItemDTO findById(long id) {
		Optional<ItemEntity> optional = itemRepository.findById(id);
		if(!optional.isPresent()) {
			throw new RuntimeException("해당 아이템은 없습니다.");
		}
		ItemEntity itemEntity = optional.get();
		
		ItemDTO itemDTO = new ModelMapper().map(itemEntity, ItemDTO.class);
		
		// 아래 세 줄은 Entity에 없는 salePrice를 추가하기 위한 작업
		int discount = itemDTO.getDiscount();
		long price = itemDTO.getPrice();
		long salePrice = price*(100-discount)/100;
		
		itemDTO.setSalePrice(salePrice);
		
		return itemDTO;
	}
}

 

MySQL에 데이터를 추가하고 Postman을 통해 테스트하기.

========MySQL에 데이터 추가========
insert into item 
(id, createDate, discount, ea, itemDescribe, itemName, price, staff, updateDate)
values
(1, now(), 10, 10, '맛있는 딸기', '딸기', 2000, 'm001', now());
<Postman>
-GET-
http://localhost:9001/item/api/id/1

 

2. 특정  staff를 통해 그 아이템의 정보 불러오기

@RestController
@RequestMapping("/item/api")
public class ItemController {

    @GetMapping("/staff/{staff}")
	public ResponseEntity<?> findByStaff(@PathVariable("staff") String staff) {
		Map<String, Object> map = new HashMap<>();
		
		if(staff==null || staff.equals("")) {
			return ResponseEntity.badRequest().body("staff 정보가 누락되었음.");
		}

		try {
			List<ItemDTO> dto = itemService.findByStaff(staff);
			map.put("itemDTO", dto);
			return ResponseEntity.ok().body(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("err", e.getMessage());
			return ResponseEntity.badRequest().body(map);
		}
	}
}
@Service
public class ItemService {

    public List<ItemDTO> findByStaff(String staff) {
    
		List<ItemEntity> list_entity = itemRepository.findByStaff(staff);
		List<ItemDTO> list_dto = new ArrayList<>();
		
		list_entity.forEach(e -> list_dto.add(new ModelMapper().map(e, ItemDTO.class)));
		
//		위의 forEach문과 같은 코드
//		for(ItemEntity e : list_entity) {
//			list_dto.add(new ModelMapper().map(e, ItemDTO.class));
//		}
		
		return list_dto;
	}
}
public interface ItemRepository extends JpaRepository<ItemEntity, Long>{

	List<ItemEntity> findByStaff(String staff);
	
}

 

<Postman>
-GET-
http://localhost:9001/item/api/staff/m001

 

3. 모든 아이템 정보 불러오기

@RestController
@RequestMapping("/item/api")
public class ItemController {

    @GetMapping("/all")
	public ResponseEntity<?> findByAll(){
		Map<String, Object> map = new HashMap<>();
		
		try {
			List<ItemDTO> list = itemService.findByAll();
			map.put("list", list);
			return ResponseEntity.ok().body(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("err", e.getMessage());
			return ResponseEntity.badRequest().body(map);
		}
	}
}
@Service
public class ItemService {

    public List<ItemDTO> findByAll() {
		
		List<ItemEntity> list_entity = itemRepository.findAll();
		List<ItemDTO> list_dto = new ArrayList<>();
		
		for(ItemEntity e : list_entity) {
			list_dto.add(new ModelMapper().map(e, ItemDTO.class));
		}
		
//		위의 for문과 같은 코드
//		list_entity.forEach(e -> list_dto.add(new ModelMapper().map(e, ItemDTO.class)));
		
		return list_dto;
	}
}

 

<Postman>
-GET-
http://localhost:9001/item/api/all

 

4. insert작업

@RestController
@RequestMapping("/item/api")
public class ItemController {

    @PostMapping("")
	public ResponseEntity<?> insert(@RequestBody ItemDTO itemDTO){
    
    	Map<String, Object> map = new HashMap<>();
		
		if(itemDTO == null) {
			return ResponseEntity.badRequest().body("입력된 데이터가 없습니다.");
		}
		
		try {
			ItemDTO dto = itemService.save(itemDTO);
			map.put("dto", dto);
			return ResponseEntity.ok().body(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("err", "입력 실패");
			return ResponseEntity.badRequest().body(map);
		}
	}
}
@Service
public class ItemService {

	public ItemDTO save(ItemDTO itemDTO) {
		
		ItemEntity itemEntity = new ModelMapper().map(itemDTO, ItemEntity.class);
		
		Date date = new Date();
		itemEntity.setCreateDate(date);
		itemEntity.setUpdateDate(date);
		
		itemEntity = itemRepository.save(itemEntity);
		
		return new ModelMapper().map(itemEntity, ItemDTO.class);
	}
}

 

<Postman>
-POST-
http://localhost:9001/item/api
Body, raw, JSON으로 설정 후 추가 할 데이터 작성
{
    "itemName": "가방",
    "price": 40000,
    "discount": 10,
    "ea": 10,
    "itemDescribe": "돈을 벌어다 주는 가방",
    "staff": "m002"
}

 

5. update작업

 - 업데이트 시간: 즉시 수정

 - createDate: 생성했던 시간 그대로(수정 불가)

@RestController 
@RequestMapping("/item/api")
public class ItemController {

	@PutMapping("")
	public ResponseEntity<?> update(@RequestBody ItemDTO itemDTO){
		Map<String, Object> map = new HashMap<>();
    
		if(itemDTO == null) {
			return ResponseEntity.badRequest().body("입력된 데이터가 없습니다.");
		}
		
		try {
			ItemDTO dto = itemService.update(itemDTO);
			map.put("dto", dto);
			return ResponseEntity.ok().body(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("err", "수정 실패");
			return ResponseEntity.badRequest().body(map);
		}
	}
}
@Service
public class ItemService {

    @Transactional
	public ItemDTO update(ItemDTO itemDTO) {
    
    	ItemEntity item_entity = new ModelMapper().map(itemDTO, ItemEntity.class);
		
		// 본 클래스에 있는 findById(long id)메서드를 이용해서 db로부터 dto객체를 가져옴.
		ItemDTO dto_db = findById(itemDTO.getId());
		
		// dto_db에 있는 createDate정보를 item_entity에 넣어줌.
		item_entity.setCreateDate(dto_db.getCreateDate());
		
         // 업데이트 시간은 즉시 수정
		item_entity.setUpdateDate(new Date());
		
		item_entity = itemRepository.save(item_entity);
		
		return new ModelMapper().map(item_entity, ItemDTO.class);
	}
}

 

<Postman>
-PUT-
http://localhost:9001/item/api
Body, raw, JSON으로 설정
{
    "id": 2,
    "itemName": "가방",
    "price": 100000,
    "discount": 50,
    "ea": 2,
    "itemDescribe": "싸다 싸",
    "staff": "m002"
}

 

5. delete 작업

@RestController
@RequestMapping("/item")
public class ItemController {
	
	@DeleteMapping("")
	public ResponseEntity<?> delete(@RequestBody ItemDTO itemDTO){
		if(itemDTO == null) {
			return ResponseEntity.badRequest().body("삭제할 데이터가 없습니다.");
		}
		
		Map<String, Object> map = new HashMap<>();
		
		try {
			itemService.delete(itemDTO);
			map.put("result", "삭제 성공");
			return ResponseEntity.ok().body(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("result", "삭제 실패");
			return ResponseEntity.badRequest().body(map);
		}
	}
}
@Service
public class ItemService {

    @Transactional
	public void delete(ItemDTO itemDTO) {
		
		ItemEntity itemEntity = new ModelMapper().map(itemDTO, ItemEntity.class);
		
		itemRepository.delete(itemEntity);
	}
}

 

<Postman>
-DELETE-
http://localhost:9001/item/api
Body, raw, JSON으로 설정
{
    "id": 2
}