diff --git a/.gitignore b/.gitignore index 746fefa70..9f31018fe 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,8 @@ out/ ### VS Code ### .vscode/ +### resources +/src/main/generated/ ### env file ### -*.env \ No newline at end of file +*.env diff --git a/build.gradle b/build.gradle index 366e882d1..23fc66b45 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,12 @@ dependencies { runtimeOnly 'com.h2database:h2' runtimeOnly 'com.mysql:mysql-connector-j' + // Querydsl + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + // OAuth & Security implementation 'org.springframework.boot:spring-boot-starter-oauth2-authorization-server' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' @@ -58,6 +64,24 @@ dependencies { testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } +// Querydsl 설정 +def generated = 'src/main/generated' + +// QClass 파일 생성 위치를 지정 +tasks.withType(JavaCompile).configureEach { + options.getGeneratedSourceOutputDirectory().set(file(generated)) +} + +// java source set 에 querydsl QClass 위치 추가 +sourceSets { + main.java.srcDirs += [ generated ] +} + +// gradle clean 시에 QClass 디렉토리 삭제 +clean { + delete file(generated) +} + tasks.named('test') { useJUnitPlatform() jvmArgs("-XX:+EnableDynamicAgentLoading") diff --git a/src/main/java/com/somemore/global/configure/QueryDslConfig.java b/src/main/java/com/somemore/global/configure/QueryDslConfig.java new file mode 100644 index 000000000..35c99c88f --- /dev/null +++ b/src/main/java/com/somemore/global/configure/QueryDslConfig.java @@ -0,0 +1,20 @@ +package com.somemore.global.configure; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QueryDslConfig { + + @PersistenceContext + private EntityManager em; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(em); + } + +} diff --git a/src/main/java/com/somemore/location/repository/LocationJpaRepository.java b/src/main/java/com/somemore/location/repository/LocationJpaRepository.java new file mode 100644 index 000000000..605d2273b --- /dev/null +++ b/src/main/java/com/somemore/location/repository/LocationJpaRepository.java @@ -0,0 +1,8 @@ +package com.somemore.location.repository; + +import com.somemore.location.domain.Location; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LocationJpaRepository extends JpaRepository { + +} diff --git a/src/main/java/com/somemore/location/repository/LocationRepository.java b/src/main/java/com/somemore/location/repository/LocationRepository.java index e68ae0abc..602211c7a 100644 --- a/src/main/java/com/somemore/location/repository/LocationRepository.java +++ b/src/main/java/com/somemore/location/repository/LocationRepository.java @@ -1,8 +1,13 @@ package com.somemore.location.repository; import com.somemore.location.domain.Location; -import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; -public interface LocationRepository extends JpaRepository { +public interface LocationRepository { + Location save(Location location); + + Optional findById(Long id); + + void deleteAllInBatch(); } diff --git a/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java b/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java new file mode 100644 index 000000000..35104da0d --- /dev/null +++ b/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java @@ -0,0 +1,30 @@ +package com.somemore.location.repository; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.somemore.location.domain.Location; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@RequiredArgsConstructor +@Repository +public class LocationRepositoryImpl implements LocationRepository { + + private final LocationJpaRepository locationJpaRepository; + private final JPAQueryFactory queryFactory; + + @Override + public Location save(Location location) { + return locationJpaRepository.save(location); + } + + @Override + public Optional findById(Long id) { + return locationJpaRepository.findById(id); + } + + @Override + public void deleteAllInBatch() { + locationJpaRepository.deleteAllInBatch(); + } +}