[QueryDSL] 2. ์˜ˆ์ œ ๋„๋ฉ”์ธ ๋ชจ๋ธ

2022. 10. 6. 13:32ใ†์ธํ”„๋Ÿฐ/์‹ค์ „! QueryDSL

728x90

https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/dashboard

 

์‹ค์ „! Querydsl - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

Querydsl์˜ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค๋ฌด ํ™œ์šฉ๊นŒ์ง€, ํ•œ๋ฒˆ์— ํ•ด๊ฒฐํ•ด๋ณด์„ธ์š”!, - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

์ธํ”„๋Ÿฐ - ์‹ค์ „! QueryDSL ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ , ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‡

 

 

 

https://hyejin.tistory.com/740?category=1091560 

 

[์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA] 2. ์˜ˆ์ œ ๋„๋ฉ”์ธ ๋ชจ๋ธ

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-JPA-%EC%8B%A4%EC%A0%84/dashboard ์‹ค์ „! ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜..

hyejin.tistory.com

์„น์…˜2์—์„œ ํ•˜๋Š” ์˜ˆ์ œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์€ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์™€ ๋™์ผํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. 

๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ์„น์…˜2 ์ •๋ฆฌ๋Š” ๋„˜์–ด๊ฐˆ๊นŒ ํ•˜๋‹ค๊ฐ€ ๊ทธ๋ƒฅ ์‹œ๊ฐ„๋„ ๋‚จ๊ณ , ๋ณต์Šต๋„ ํ•  ๊ฒธ ์ •๋ฆฌํ•œ๋‹ค. 

 

 

 

1๏ธโƒฃ ์˜ˆ์ œ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋™์ž‘ ํ™•์ธ 

๊ฐ„๋‹จํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด๋‹ค. 

Member์™€ Team์€ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋กœ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

Member ์—”ํ‹ฐํ‹ฐ

@Setter

: ์‹ค๋ฌด์—์„œ๋Š” ๊ฐ€๊ธ‰์  @Setter ์–ด๋…ธํ…Œ์ด์…˜์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (์ƒ์„ฑ์ž๋กœ ํ•ด๊ฒฐํ•˜๋Š”๊ฒŒ ์ข‹์Œ) 

 

@NoArgsConstructor(access = AccessLevel.PROTECTED)

: ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” public ์œผ๋กœ ์—ด์–ด๋‘๋ฉด ์—ฌ๊ธฐ์ €๊ธฐ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ง‰๊ณ  ์‹ถ์€๋ฐ, JPA๋Š” ์ŠคํŽ™์ƒ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ PROTECTED๊นŒ์ง€๋Š” ์—ด์–ด๋‘ฌ์•ผ ํ•ด์„œ AccessLevel์„ PROTECTED๋กœ ์„ค์ •ํ•ด์คฌ๋‹ค. 

 

@ToString()

: toString ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์—†๋Š” ํ•„๋“œ๋งŒ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

์™œ๋ƒํ•˜๋ฉด Team ์„ ํฌํ•จํ•ด๋ฒ„๋ฆฌ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๋กœ Team์—์„œ member๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , member๊ฐ€ team์„ ํ˜ธ์ถœํ•˜๊ณ ...

์ด๋Ÿฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

@ManyToOne(fetch= FetchType.LAZY)

: XToOne ๊ด€๊ณ„๋Š” ๊ธฐ๋ณธ ์ „๋žต์ด EAGER๋ผ์„œ LAZY๋กœ ์„ค์ •ํ•ด ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„๋Š” ์ง€์—ฐ ๋กœ๋”ฉ ์ „๋žต์œผ๋กœ ํ•ด์•ผ ํ•œ๋‹ค. 

 

changeTeam()

:  Member์™€ Team์ด ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— Member์˜ Team์„ ์„ค์ •ํ•ด์ฃผ๊ณ , 

๋ฐ˜๋Œ€๋กœ Team์˜ Member List์—๋„ Member๋ฅผ ์„ธํŒ…ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

 

 

Team ์—”ํ‹ฐํ‹ฐ

@OneToMany(mappedBy = "team")

Member์™€ Team์€ ์ง€๊ธˆ ์ผ๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์ด๋‹ค. 

์ด๋•Œ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์€ ์™ธ๋ž˜ํ‚ค๊ฐ€ ์žˆ๋Š” ์ชฝ์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—  Member.Team์ด ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด๊ณ , Team.members๋Š” ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด ์•„๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ Member.Team์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์™ธ๋ž˜ํ‚ค ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ฐ˜๋Œ€ํŽธ์€ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

๋ฐ์ดํ„ฐ ํ™•์ธ ํ…Œ์ŠคํŠธ

MemberTest

@SpringBootTest

: ํ…Œ์ŠคํŠธ์—์„œ ์Šคํ”„๋ง์„ ๋„์›Œ์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. 

 

@Transactional

: JPA์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ๋™์ž‘ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์„ ๊ฑธ์–ด์ค€๋‹ค. 

์ด ์–ด๋…ธํ…Œ์ด์…˜์€ TEST์— ์žˆ์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๊ณ  ์•Œ์•„์„œ ๋กค๋ฐฑํ•ด์ค˜์„œ DB์— ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

 

MemberTest ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

์›๋ž˜ ํ…Œ์ŠคํŠธ๋ฉด ์ด๋ ‡๊ฒŒ Sysout์œผ๋กœ ์ถœ๋ ฅํ•ด์„œ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š”๊ฒŒ ์ข‹์€๋ฐ 

์ด๊ฑด ํ…Œ์ŠคํŠธ ์˜ˆ์ œ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ํ•™์Šตํ•˜๋Š”๊ฑฐ๋‹ˆ๊นŒ ์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ๋„˜์–ด๊ฐ„๋‹ค๊ณ  ํ•œ๋‹ค~.. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90