์์ค ์ฝ๋๋ ์ฌ๊ธฐ ์์ต๋๋ค. (commit hash: 0bacabb) > git clone https://github.com/lcalmsky/jpa > git checkout 0bacabb Overview ์ฐ๊ด๊ด๊ณ ๋งคํ ์์ ๋ฅผ ๊ตฌํํฉ๋๋ค. ํ ์ด๋ธ ๊ตฌ์กฐ ๊ฐ์ฒด ๊ตฌ์กฐ ๊ตฌํ ํ ์ด๋ธ ๊ตฌ์กฐ์์ ํ์ธํ๋ค์ํผ FK๋ฅผ ๊ฐ์ง๋ ํ ์ด๋ธ์ orders, order_item ๋ ๊ฐ์ง์ด๊ณ , ๊ฐ์ฒด ๊ธฐ์ค์ผ๋ก๋ Order, OrderItem์ด ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ Order๊ฐ Member๋ฅผ @ManyToOne์ผ๋ก ๊ฐ์ง๊ณ , @JoinColumn(name = "member_id")์ ์ฌ์ฉํด join ํ ์ ์์ต๋๋ค. OrderItem์ด Order๋ฅผ @ManyToOne์ผ๋ก ๊ฐ์ง๊ณ , @JoinColumn(name = "order..
์์ค ์ฝ๋๋ ์ฌ๊ธฐ ์์ต๋๋ค. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๊ด๋ฆฌ์ ์ฃผ์ฒด์ธ ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ ๋ํด ์์๋ด ๋๋ค. ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ(Owner) ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ์ฒด์ ๋ ๊ด๊ณ์ค ํ๋๋ฅผ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ผ๋ก ์ง์ ex) Member ๊ฐ์ฒด๊ฐ ๊ฐ์ง Team์ด ์ฃผ์ธ์ด ๋ ์ง Team ๊ฐ์ฒด๊ฐ ๊ฐ์ง Members๊ฐ ์ฃผ์ธ์ด ๋ ์ง ์ ํจ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ๋ง FK๋ฅผ ๊ด๋ฆฌ(๋ฑ๋ก, ์์ ๋ฑ) ์ฃผ์ธ์ด ์๋ ์ชฝ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ ์ฃผ์ธ์ด ์๋ ์ชฝ์์ mappedBy ์์ฑ์ผ๋ก ์ฃผ์ธ ์ง์ ๊ทธ๋ ๋ค๋ฉด ๋ ๊ด๊ณ ์ค ์ด๋ค ๊ฒ์ ์ฃผ์ธ์ผ๋ก ์ง์ ํ๋ ๊ฒ ํ..
์์ค ์ฝ๋๋ ์ฌ๊ธฐ ์์ต๋๋ค. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค. JPA๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ํฌ์คํ ํ๋ ๊ธ์ด์ง๋ง ์คํ๋ง ๋ด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ก ๊ตฌ์ฑํ์์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๋ด์ฉ์ ๋ค๋ฅธ ํฌ์คํ ์๋ ๊ทธ๋์ ๋ง์ด ์์ฑํ์๊ธฐ ๋๋ฌธ์ ์๋ตํ์์ต๋๋ค. ๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ๋ง ์ ๋ฒ ํฌ์คํ ์์์ ๋ค๋ฅด๊ฒ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๋ชจ๋ธ๋งํ ๋ชจ์ต์ ์๋์ ๊ฐ์ต๋๋ค. ๊ฐ์ฒด ์ฐ๊ด๊ด๊ณ Member ๊ฐ์ฒด๊ฐ Team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํด์ teamId๋ฅผ ๊ฐ์ง๋ ๊ฒ ์๋๋ผ Team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์์ด์ผ ํฉ๋๋ค. ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ..
Overview ๊ฐ์ฒด์ ํ ์ด๋ธ๊ณผ ์ฐ๊ด๊ด๊ณ์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ธฐํฉ๋๋ค. ์์ ์๋๋ฆฌ์ค ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ์ ๋ํด ์ค๋ช ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด ์ธ ๊ฐ์ง ์ํฉ์ ๊ฐ์ ํฉ๋๋ค. ํ์๊ณผ ํ ํ์์ ํ๋์ ํ์๋ง ์์๋ ์ ์์ ํ์:ํ=N:1 ์ฐ๊ด๊ด๊ณ๊ฐ ํ์ํ ์ด์ ์์ ์๋๋ฆฌ์ค์ ์ํฉ์ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ์ฒด ์ฐ๊ด๊ด๊ณ ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ ํ ์ด๋ธ์ ๋ง์ถฐ์ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ๋งํ๊ฒ๋๋ฉด ์๋ก ์๋ฌด ๊ด๊ณ๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ๋์ด๋ฒ๋ฆฝ๋๋ค. ํ ์ด๋ธ๋ผ๋ฆฌ๋ FK๋ฅผ ์ด์ฉํด ๊ด๊ณ๋ฅผ ๋ํ๋ผ ์ ์์ง๋ง ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ID๋ฅผ ๊ฐ๊ณ ์๋ค๊ณ ํด๋ ์๋ก ๊ด๊ณ๊ฐ ์๋ค๊ณ ๋ณด๊ธด ํ๋ญ๋๋ค. ์ด๋ฅผ ์๋ฐ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. package com.tistory.jaimenote.jpa.domain.entity; import javax.pe..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ ์์ต๋๋ค. ์ด์ ํฌ์คํ ์ ์ด์ด์ Querydsl์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์๊ฐํฉ๋๋ค. ๊ธฐ๋ณธ Join ์ฒซ ๋ฒ ์งธ ํ๋ผ๋ฏธํฐ์ joinํ ๋์, ๋ ๋ฒ ์งธ ํ๋ผ๋ฏธํฐ์ ๋ณ์นญ์ผ๋ก ์ฌ์ฉํ Q Type์ ์ง์ ํฉ๋๋ค. package io.lcalmsky.querydsl.domain; import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBoot..
์คํ๋ง ๋ถํธ 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๊ฐ ์ ๊ณตํ๋ ๊ณตํต ๊ตฌํ์ฒด๋ฅผ ๋ถ์ํด๋ด ์๋ค. 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..
๋ชจ๋ ์์ค ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. Entity๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋, ๊ฐ๊ฐ์ ์๊ฐ๊ณผ ๋ด๋น์๋ฅผ ์ถ์ ํ ํ์๊ฐ ์์ต๋๋ค. ํนํ ์ค๋ฌด์์ ์ด๋ ฅ์ ๋จ๊ธฐ๊ธฐ์ํด ๋ง์ด ์ฐ์ด๋ ๊ธฐ๋ฅ์ธ๋ฐ์, ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์ Entity๋ง๋ค ํ์์๋ฐ๋ผ ์์ฑ ์๊ฐ, ์์ ์๊ฐ, ์์ฑํ ์ฌ๋, ์์ ํ ์ฌ๋ ์ด ๋ค ๊ฐ์ง ์์ฑ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. JPA๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ Entity๊ฐ ๊ฒฐ๊ตญ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๊ณตํต์ ์ธ ์์ฑ์ ๋ชจ๋ ๊ฐ์ง๋ ํด๋์ค๋ฅผ ์ค๊ณํ๋ฉด ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋๋ฐ์, ๊ทธ ๋ฐฉ๋ฒ์ ํ ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค. BaseEntity ์ ์ ์์ฑ ์๊ฐ, ์์ ์๊ฐ์ ๊ฐ์ง๋ Entity๋ฅผ ์์ฑํฉ๋๋ค. package io.lcalmsky.springdatajpa.domain.entity; import javax.persistence.Colu..
์ฌ์ฉ์ ์ ์ Repository Best Practice ์ฌ์ฉ์ ์ ์ Repository๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ ์ Repository๋ผ๊ณ ํจ์, JpaRepository๋ฅผ ์์ํด์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ตฌํ์ฒด์์ ์ง์ JPA๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ MyBatis, JdbcTemplate, QueryDSL ๋ฑ์ ์ด์ฉํด ๊ตฌํํ ๊ฒ์ ๋งํฉ๋๋ค. ์๋์ ์ผ๋ก(?) ๋์ ์์ Entity๊ฐ Member, Team์ด ์กด์ฌํ๊ณ Member๋ JpaRepository๋ฅผ ์ฌ์ฉํ๊ณ Team์ ์ฌ์ฉ์ ์ ์ Repository๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๊ทธ๋ฅ ๊ตฌํํด๋ ์๊ด์์ต๋๋ค. ํ์ง๋ง MemberRepository๊ฐ ์กด์ฌํ๋๋ฐ CustomMemberRepository๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ S..
- Total
- 181,454
- Today
- 42
- Yesterday
- 654
- QueryDSL
- Spring Data JPA
- ์คํ๋ง ๋ฐ์ดํฐ jpa
- Spring Boot JPA
- intellij
- ์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์
- ํจ๊ป ์๋ผ๊ธฐ
- Java
- ์คํ๋ง ๋ถํธ ํํ ๋ฆฌ์ผ
- spring boot application
- Spring Boot Tutorial
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ
- gRPC
- ํด๋ฆฐ ์ํคํ ์ฒ
- Jackson
- ์๊ณ ๋ฆฌ์ฆ
- ํจ๊ป ์๋ผ๊ธฐ ํ๊ธฐ
- leetcode
- JPA
- Linux
- Spring Boot
- ์คํ๋ง ๋ถํธ ํ์ ๊ฐ์
- ์คํ๋ง ๋ถํธ
- spring boot app
- proto3
- spring boot jwt
- JSON
- ์คํ๋ง๋ถํธ
- @ManyToOne
- r