์คํ๋ง ๋ถํธ 2.6 ์ด์์ ์๋ ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์. 2022.08.23 - [Querydsl] - ์คํ๋ง๋ถํธ 2.6 ์ด์ ๋ฒ์ ์์ Querydsl ์ค์ ๋ฐฉ๋ฒ ๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ ์์ต๋๋ค. Querydsl์ ์ฌ์ฉํ๊ธฐ ์ํด ํ๋ก์ ํธ ์ค์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฌ๋ ค๋ด ์๋ค! ๋จผ์ ์๋ฐ ๋ฒ์ ์ 11, ์คํ๋ง ๋ฒ์ ์ 2.5.2๋ฅผ ์ ํํ์๊ณ gradle ํ๋ก์ ํธ๋ก ์์ฑํ์ฌ ์๋ ๋ค ๊ฐ์ง dependency๋ฅผ ์ค์ ํ์์ต๋๋ค. spring-boot-starter-web spring-boot-starter-data-jpa lombok h2 build.gradle ์์ ๊ฐ์ด ์ค์ ํ์ จ๋ค๋ฉด build.gradle ํ์ผ์ด ์๋ ์ฒ๋ผ ์์ฑ๋์์ํ ๋ฐ์, plugins { id 'org.springframework.boot' version..
) ๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด์ ํฌ์คํ ์์ JPA๊ฐ save()๋ฅผ ํธ์ถํ ๋ ์๋ก์ด Entity์ธ์ง ๊ธฐ์กด Entity์ธ์ง ํ๋จํด persist() ๋๋ merge()๋ฅผ ํธ์ถํ๋ค๋ ๋ด์ฉ์ ๋ค๋ฃฌ ๋ฐ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด JPA๋ ๊ณผ์ฐ ์ด๋ป๊ฒ ์๋ก์ด Entity์ธ์ง ํ๋จํ๋ ๊ฒ ์ผ๊น์? ์ค๋ช ์ ์ํด ๊ฐ๋จํ ์์ค ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. package io.lcalmsky.springdatajpa.domain.entity; import lombok.Getter; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity @Getter public..
์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ์ ๊ณตํ๋ ๊ณตํต ๊ตฌํ์ฒด๋ฅผ ๋ถ์ํด๋ด ์๋ค. SimpleJpaRepository๋ JpaRepository๋ฅผ ๊ตฌํํ๋ ๊ตฌํ์ฒด๋ก ๊ธฐ๋ณธ์ ์ธ CRUD๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ฝ 1000 ๋ผ์ธ์ ๊ฐ๊น์ด ์์ค ์ฝ๋๊ฐ ๋ด๋ถ์ ์ผ๋ก EntityManager๋ฅผ ์ฃผ์ ๋ฐ์ JPA๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ๋ช ๊ฐ์ง ๊ตฌํ๋ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์กฐํ CRUD์ค R์ ํด๋นํ๋ ๊ฒ์ผ๋ก select ๋์ ์ค PK๋ก ํ row๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํฉ๋๋ค. @Override public Optional findById(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); Class domainType = getDomainClass(); // (1)..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. API์์ ํ์ด์ง ํ์ฉ ์ง๋ ๋ฒ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ํ์ด์ง ๋ฐ ์ ๋ ฌ์ ์ง์ํ๋ ๋ถ๋ถ์ ์ดํด๋ดค์๋๋ฐ์, API ํํ๋ก ์ ๊ณต๋ ๋๋ ์ด๋ป๊ฒ ํ์ฉ๋ ์ ์๋์ง Controller๋ฅผ ๊ฐ๋ฐํด ํ์ธํด๋ณด๊ฒ ์ต๋๋ค. package io.lcalmsky.springdatajpa.controller; import io.lcalmsky.springdatajpa.domain.entity.Member; import io.lcalmsky.springdatajpa.domain.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; impo..
์ฌ์ฉ์ ์ ์ Repository Best Practice ์ฌ์ฉ์ ์ ์ Repository๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ ์ Repository๋ผ๊ณ ํจ์, JpaRepository๋ฅผ ์์ํด์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ตฌํ์ฒด์์ ์ง์ JPA๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ MyBatis, JdbcTemplate, QueryDSL ๋ฑ์ ์ด์ฉํด ๊ตฌํํ ๊ฒ์ ๋งํฉ๋๋ค. ์๋์ ์ผ๋ก(?) ๋์ ์์ Entity๊ฐ Member, Team์ด ์กด์ฌํ๊ณ Member๋ JpaRepository๋ฅผ ์ฌ์ฉํ๊ณ Team์ ์ฌ์ฉ์ ์ ์ Repository๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๊ทธ๋ฅ ๊ตฌํํด๋ ์๊ด์์ต๋๋ค. ํ์ง๋ง MemberRepository๊ฐ ์กด์ฌํ๋๋ฐ CustomMemberRepository๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ S..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. Fetch Join๊ณผ @GraphEntity๋ฅผ ์๊ฐํ๊ธฐ ์ ์ JPA๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๊ฒช์ ์ ์๋ ์ฌ๋ก ํ๋๋ฅผ ์๊ฐํฉ๋๋ค. Member Entity์ Team Entity๊ฐ ๋ค๋์ผ ๊ด๊ณ(@ManyToOne) ์ผ ๋ Entity ํด๋์ค์ ์๋ก์ ๊ด๊ณ๋ฅผ ํ์ํด์ค๋๋ค. Entity๊ฐ ์ฐ๊ด๊ด๊ณ๊ฐ ์๊ณ JPA๋ฅผ ์ด์ฉํ์ฌ ์กฐํํด์ผ ํ๋ ์ํฉ์์๋ ๋๋๋ก์ด๋ฉด FetchType.LAZY ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ๊ด๊ณ ํ์ ์ ์ํด ์์ค ์ฝ๋๋ฅผ ์ดํด๋ด ์๋ค. (์ค๋ช ์ ํ์ ์๋ import๋ฌธ ๋ฑ์ ์๋ตํ์์ต๋๋ค.) @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString public class Member ..

๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. JPA๋ ๋ณดํต ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ณ๊ฒฝํ๋ฉด ๋ณ๊ฒฝ ๊ฐ์ง(dirty checking)๋ฅผ ํตํด DB์ ์ ๋ฐ์ดํธ ํด๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ฐ ์ ๋ฐ์ดํธ๋ค์ ๊ฑด ๋ณ๋ก select ์ดํ update๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์์ฒ ๊ฑด์ ์ ๋ฐ์ดํธ ํด์ผํ๋ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค. JPA๋ฅผ ์ฌ์ฉํด์๋ ์ ์ฒ, ์ ๋ง ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ๋ฐ์ดํธ ํ๋ ๋ฒํฌ ์ ๋ฐ์ดํธ(Bulk Update)์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. @Modifying ์ ๋ํ ์ด์ ๋ฒํฌ ์ ๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ํด์ @Query์ ํจ๊ป @Modifying ์ ๋ํ ์ด์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋์ด๊ฐ N์ด ์ด์์ธ ์ ์ฒด ํ์์ ๋์ด๋ฅผ 1์ฉ ์ฆ๊ฐ์์ผ์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ด ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด๋ฅผ ๊ตฌํํ ์์ค ์ฝ๋ ์ ๋๋ค. package i..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์ธํฐํ์ด์ค ์ธ์๋ ๋ฉ์๋ ์ถ๊ฐ ๋ง์ผ๋ก ์ง์ ๊ตฌํ์ฒด๋ฅผ ๊ตฌํํ์ง ์์๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ๋ฉ์๋ ๊ธฐ๋ฅ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ์ฟผ๋ฆฌ ์์ฑ ๋ฉ์๋ ์ด๋ฆ์ ๋ถ์ํ์ฌ JPQL ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. package io.lcalmsky.springdatajpa.domain.entity; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; import javax.persistence.*; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTE..
- Total
- 180,578
- Today
- 58
- Yesterday
- 220
- ํจ๊ป ์๋ผ๊ธฐ
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ
- Linux
- Jackson
- spring boot app
- QueryDSL
- ํจ๊ป ์๋ผ๊ธฐ ํ๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ
- ์คํ๋ง ๋ถํธ ํํ ๋ฆฌ์ผ
- spring boot jwt
- ์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์
- r
- leetcode
- Spring Boot
- ์คํ๋ง ๋ถํธ ํ์ ๊ฐ์
- spring boot application
- ์คํ๋ง ๋ถํธ
- ์คํ๋ง ๋ฐ์ดํฐ jpa
- Java
- proto3
- JSON
- @ManyToOne
- gRPC
- Spring Data JPA
- ํด๋ฆฐ ์ํคํ ์ฒ
- Spring Boot JPA
- Spring Boot Tutorial
- JPA
- ์คํ๋ง๋ถํธ
- intellij