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
}
'스프링부트(Spring Boot)' 카테고리의 다른 글
서로 다른 사이트간의 통신을 방해하는 CORS 해결 방법 (0) | 2023.04.16 |
---|---|
Member 생성 및 CRUD 작업 (mmsapi 프로젝트) (0) | 2023.04.12 |
Staff 생성 및 CRUD작업 (smsapi 프로젝트) (0) | 2023.04.12 |
Item 생성 (imsapi 프로젝트) (0) | 2023.04.11 |