์ง๋ ์๊ฐ์ ์ฐ๋ฆฌ๋ DB ์ฐ๊ด๊ด๊ณ ํ ์ด๋ธ ์์ฑ ๊น์ง ์งํ์ ํ์๋ค.
์ฐ๊ด๊ด๊ณ ํ
์ด๋ธ์ ์์ฑํ๋ฉฐ 1:N ๊ณผ N:1์ ์ฐ๊ด๊ด๊ณ์ ๋ํด์ ํ
์ด๋ธ์ ์์ฑํ์๊ณ ์ด์ ๋ Spring์์ ์ค์ ๋ก ๊ด๊ณ๋ฅผ ํตํ Data ํธ์ถ์ ํ์ตํด๋ณด์.
ํ์ฌ ํ ์ด๋ธ์ ์ฐ๊ด ๊ด๊ณ
๋ค์๊ณผ ๊ฐ์ ๋ ์ฐ๊ด ๊ด๊ณ๋ฅผ ํ์ด๋ณด์๋ฉด
- user๊ณผ item์ ๊ด๊ณ :
์๋ก ํ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ ํ ๊ด๊ณ๋ ๋งบ์ง ์๊ณ ์๋ค. - user๊ณผ order_list์ ๊ด๊ณ : order_list๊ฐ ํ์ฌ user์
id
๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์(orderList)n:1(user)
์ ๊ด๊ณ ์ด๋ค. - item๊ณผ order_list์ ๊ด๊ณ : order_list๊ฐ ํ์ฌ item์
id
๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์(orderList)n:1(item)
์ ๊ด๊ณ ์ด๋ค.
๊ทธ๋ผ ์ด์ ์ฝ๋ฉ์ ํด๋ณด์.
์ฐ๊ด๊ด๊ณ๋ฅผ ํ ๋๋ก Entity๋ฅผ ๋ง๋ค์
ํ ์ด๋ธ์ ์์ฑํ์ผ๋ฏ๋ก Springboot์์ ํ ์ด๋ธ์ ๋ฐ๋ฅธ Entity๋ฅผ ๋ง๋ค์ด ๋ณด์.
entity
ํจํค์ง์ ํ ์ด๋ธ ์ด๋ฆ์ ๋ง๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ค๋ค.- ํ ์ด๋ธ์ ์นผ๋ผ์ ํด๋์ค์ ํ๋๋ก ๋ง๋ค์ด ์ค๋ค.
์ด์ Order_detail์ Entity๋ฅผ ํ ์คํธ ํด๋ณด์.
์ฐ๋ฆฌ์ ๋ชฉ์ ์ Order_Detail์์ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ํ์ id์ ํด๋น ๊ณ ๊ฐ์ ์์ดํ id๋ฅผ ์ด์ฉํด ์ฃผ๋ฌธ์ ์์ฑํ๋ ๊ฒ ์ด๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ์์ค๋ฅผ ๋ง๋ค์ด ๋ณด์
๊ฐ๊ฒฐํ ์์ค์ฝ๋๋ฅผ ์ํด import
๊ตฌ๋ฌธ์ ๋ชจ๋ ์ ๊ฑฐํ์์ต๋๋ค.
@RestController
@RequestMapping("/item")
public class ItemController {
@Autowired
UserRepository userRepository;
@Autowired
OrderDetailRepository orderDetailRepository;
@Autowired
ItemRepository itemRepository;
@GetMapping("/order")
public String order(@RequestParam Long userId, @RequestParam Long itemId){
AtomicBoolean userFlag = new AtomicBoolean(false);
AtomicBoolean itemFlag = new AtomicBoolean(false);
Optional<User> user = userRepository.findById(userId);
user.ifPresent(selectUser ->{
userFlag.set(true);
});
Optional<Item> item = itemRepository.findById(itemId);
item.ifPresent(selectItem ->{
itemFlag.set(true);
});
if (userFlag.get() && itemFlag.get()) {
OrderDetail orderDetail = new OrderDetail();
orderDetail.setUserId(userId);
orderDetail.setItemId(itemId);
orderDetail.setOrderAt(LocalDateTime.now());
OrderDetail newOrder = orderDetailRepository.save(orderDetail);
return "์ฃผ๋ฌธ ์ ๋ณด" + newOrder + " ์ ์ฃผ๋ฌธ์ด ์ฃผ๋ฌธ ๋์์ต๋๋ค.";
}
return "์๋ชป๋ ์ฃผ๋ฌธ ์
๋๋ค.";
}
}
์์ http://localhost:8080/item/order/?userId=6&itemId=4
๊ณผ ๊ฐ์ url์ ์
๋ ฅํ๋ฉด
๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ์ ์ ์ ์๋ค.
ํ์ง๋ง
ํ์ง๋ง ์ด์ ๊ฐ์ด ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ด์ฉํ์ง ์๊ณ ํ์ผ๋ฏ๋ก ์๋ฌด๋ฐ ์์ฉ์ด ์๋ค.
์ด์ ์ฌ๊ธฐ์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ์ถ๊ฐ์ํจ๋ค๋ฉด
๊ณผ ๊ฐ์ ์์ผ๋ก Long ํ์ ์ user ์ ๋ณด์ item ์ ๋ณด๊ฐ ์๋ ๊ฐ์ฒด ํ์ ์ user์ item์ ๋ฐ์ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋นจ๊ฐ์์ผ๋ก User์ Item ๋ฐ์ ๋ฐ์ค์ด ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋๋ฐ ์ด๋ Hibernate๋ฅผ ํตํ ์ฐ๊ด ๊ด๊ณ Annotation์ ์ค์ ํ๊ธฐ ์์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ๊ด๊ด๊ณ ์ด๋ ธํ ์ด์
์๊น ์ฐ๊ด๊ด๊ณ๋ฅผ ํ์ด ๋์๋ ๊ฒ์ ๋ณด๋ฉด
- user๊ณผ order_list์ ๊ด๊ณ : order_list๊ฐ ํ์ฌ user์
id
๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์(orderList)n:1(user)
์ ๊ด๊ณ ์ด๋ค. - item๊ณผ order_list์ ๊ด๊ณ : order_list๊ฐ ํ์ฌ item์
id
๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์(orderList)n:1(item)
์ ๊ด๊ณ ์ด๋ค.
์์
- N:1 ->
@ManyToOne
- 1:N ->
@OneToMany
๋ก ๋ฐ๊ฟ ์ ์๋๋ฐ ์์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ๊ฐ์ฒด ํ์ ์ผ๋ก ๋ฐ์์ผ ํ๋ค.
User ์ ์ฅ์์ OrderDetail
User ์
์ฅ์์ OrderDetail๋ 1๋ช
์ user๊ฐ ์ฌ๋ฌ๊ฐ์ง OrderDetail๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ 1:N (@OneToMany
)๊ด๊ณ ์ด๋ฏ๋ก ํด๋น ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ์ ๋ณ์๊ฐ ํ์ํ๋ค.
mappedBy = "user"
:user ํ ์ด๋ธ์ ์ฐ๊ฒฐ์ํค๊ธฐ ์ํจfetch = FetchType.LAZY
: ์ถํ ์ค๋ช
๋ํ ์์ ๋ณธ๋ค๋ฉด List<OrderDetail>
๋ก ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ OrderDetail
์ด N์ ํด๋นํ๋ฏ๋ก List๋ก ๋ฐ๋ ๊ฒ์ด๋ค.
Item ์ ์ฅ์์ OrderDetail ๋ํ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ํ๋ฉด ๋๋ค
Test ์ฝ๋ ์์ฑ
์ด์ OrderDetail์ id๋ฅผ ํตํด์ User์ Item์ ์ ๋ณด๋ฅผ ๊ฒ์ํ ์ ์๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ด
์ ์ฝ๋๋ฅผ ํตํด์ ์ฌ๋ฌ ๋ฒ์ user์ ๊ฒ์๊ณผ item์ ๊ฒ์ ์์ด ๋ฐ๋ก
๊ณผ ๊ฐ์ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์ป์ ์ ์๊ฒ ๋๋ค.
๋๊ธ