Spring/Spring JPA ํ™œ์šฉ

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 5. ์›น ๊ณ„์ธต ๊ฐœ๋ฐœ

public class MemberForm { @NotEmpty(message = "ํšŒ์› ์ด๋ฆ„์€ ํ•„์ˆ˜ ์ž…๋‹ˆ๋‹ค") private String name; private String city; private String street; private String zipcode; } ํผ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ™”๋ฉด ๊ณ„์ธต๊ณผ ์„œ๋น„์Šค ๊ณ„์ธต์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•œ๋‹ค. @NotEmpty Null, ๋นˆ ๋ฌธ์ž์—ด ๋ถˆ๊ฐ€ @PostMapping("/members/new") public String create(@Valid MemberForm form , BindingResult result) { if (result.hasErrors()){ return "members/createMemberForm"; } @Valid ํŠน์ง• ์œ ํšจ์„ฑ๊ฒ€์‚ฌ , ์ž˜๋ชป๋œ..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 4. ์ฃผ๋ฌธ ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ

์ฃผ๋ฌธ ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ //== ์ƒ์„ฑ ๋ฉ”์„œ๋“œ ==// public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) ๊ฐ€๋ณ€์ธ์ž ํƒ€์ž…... ๋ณ€์ˆ˜๋ช…๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์„ ์–ธ for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์ง€์ •

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 3. ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ

@Service @Transactional(readOnly = true) public class MemberService @Service ์Šคํ”„๋ง์—์„œ ์„œ๋น„์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜. ์‚ฌ์‹ค @Component ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๊ฑฐ์˜ ์ฐจ์ด๊ฐ€ ์—†์ง€๋งŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด ํด๋ž˜์Šค ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. @Transactional JPA์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด๋‚˜ ๋กœ์ง๋“ค์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค . DB์™€ ๊ด€๋ จ๋œ, ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค ํด๋ž˜์Šค ํ˜น์€ ๋ฉ”์„œ๋“œ์— @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„์ฃผ๋ฉด๋œ๋‹ค. @Transactional์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—… ์ค‘์— ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ „์ฒด ์ž‘์—…์„ ์ทจ์†Œํ•œ๋‹ค. readOnly=true - ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉ..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 2. ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐœ๋ฐœ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ Repository repository: JPA๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„์ธต, ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์‚ฌ์šฉ Entity์— ์˜ํ•ด ์ƒ์„ฑ๋œ DB์— ์ ‘๊ทผํ•˜๋Š” ๋ฉ”์„œ๋“œ(ex) findAll()) ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ ์–ธํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ์—ฌ๊ธฐ์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜, ๋„ฃ์–ด์ง„ ๊ฐ’์„ ์กฐํšŒํ•˜๋Š” ๋“ฑ์˜ CRUD(Create, Read, Update, Delete)๋ฅผ ํ•ด์•ผ ์“ธ๋ชจ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์ฃผ๋Š” ๊ณ„์ธต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. @Repository public class MemberRepository { @PersistenceContext private EntityManager em; @Repository : ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก, JPA ์˜ˆ์™ธ๋ฅผ ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ์˜ˆ์™ธ๋กœ ์˜ˆ์™ธ ..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 1. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column์€ ๊ฐ์ฒด ํ•„๋“œ๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. name : ํ•„๋“œ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค. ์—”ํ‹ฐํ‹ฐ์˜ ์‹๋ณ„์ž๋Š” id ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  PK ์ปฌ๋Ÿผ๋ช…์€ member_id ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. @Embeddable ๋„์‹œ, ์ฃผ์†Œ ๋ฒˆ์ง€, ์ฃผ์†Œ ์šฐํŽธ๋ฒˆํ˜ธ๋ฅผ ์ฃผ์†Œ๋ผ๋Š” ๊ฐ์ฒด๋กœ ๋ฌถ์–ด ํ‘œํ˜„ํ•˜๋ฉด ๋ณด๋‹ค ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. @Embeddable public class Address { private String city; private String street; privat..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 0. Entity / EntityManager

Entity(์—”ํ‹ฐํ‹ฐ) JPA์—์„œ ์—”ํ‹ฐํ‹ฐ๋ž€ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด, DB ํ…Œ์ด๋ธ”์— ๋Œ€์‘ํ•˜๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉฐ, JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity๋ฅผ ๊ผญ ๋ถ™์—ฌ์•ผ๋งŒ ๋งคํ•‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ ˆํžˆ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ์™„์„ฑ๋œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” ๋ช…์„ธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” 2์ฐจ์› ํ…Œ์ด๋ธ” ์ด ํ…Œ์ด๋ธ”์— ์„œ๋น„์Šค์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ค ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์„ธ๋กœ์˜ ์—ด ๋ถ€๋ถ„์ด Column ์ด๊ณ , ๊ฐ€๋กœ์˜ ํ–‰ ๋ถ€๋ถ„์ด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. ์ด ํ…Œ์ด๋ธ” ์ „์ฒด๊ฐ€ ์—”ํ‹ฐํ‹ฐ ์ด๊ณ , ๊ฐ 1๊ฐœ์˜ ํ–‰๋“ค์ด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค...

hello_u
'Spring/Spring JPA ํ™œ์šฉ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก