Querydsl을 스프링부트 프로젝트에 적용해보자!
build.gradle.kts
에 다음 항목들을 추가한다. dependencies
에서 원하는 버전은 말그대로 원하는 querydsl 버전을 적어넣으면 된다. 특정하게 원하는 버전이 없다면 가장 최신 버전인 5.0.0을 적으면 된다.
plugins {
...
// 플러그인에 추가
kotlin("kapt") version "1.7.10"
...
}
dependencies {
// querydsl 추가
implementation("com.querydsl:querydsl-jpa:{원하는 버전}")
kapt("com.querydsl:querydsl-apt:{원하는 버전}:jpa")
kapt("org.springframework.boot:spring-boot-configuration-processor")
}
위 같이 설정한 후 빌드를 하게 되면 build>generated>source>kapt>main
하위에 QClass가 생기는 것을 확인할 수 있다.
프로젝트 어디에서든 JPAQueryFactory
를 주입받아 사용하기 위해 JPAQueryFactory
bean으로 등록하는 과정이다.
import com.querydsl.jpa.impl.JPAQueryFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import javax.persistence.EntityManager
import javax.persistence.PersistenceContext
@Configuration
class QueryDslConfig{
@PersistenceContext
lateinit var entityManager: EntityManager
@Bean
fun jpaQueryFactory(): JPAQueryFactory {
return JPAQueryFactory(entityManager)
}
}
UserRepository
의 기능을 확장하기 위해 UserSupport
라는 인터페이스를 새로 만들었다.
interface UserSupport {
fun findUsersByName(username: String): List<UserEntity>
}
findUsersByName(username)
이라는 기능을 통해 username
이라는 이름을 가진 UserEntity
를 찾고자 한다.
import com.querydsl.core.types.Projections
import com.querydsl.jpa.impl.JPAQueryFactory
import com.project.core.user.database.QUserEntity.userEntity
import org.springframework.stereotype.Component
@Component
class UserSupportImpl(
private val queryFactory: JPAQueryFactory //JPAQueryFactory를 주입받아 사용한다.
): UserSupport {
override fun findUsersByName(username: String): List<UserEntity> {
return queryFactory
.selectFrom(userEntity) //.select(userEntity).from(userEntity)를 줄여서 쓸 수 있다
.where(userEntity.name.eq(username)) //userEntity.name == username
.fetch()
}
}
메소드를 만든 후 아래와 같이 UserRepository
에서 UserSupport
를 상속 받으면 Service에서 userRepository.findUsersByName()
으로 바로 사용할 수 있다.
interface UserRepository: JpaRepository<UserEntity, Long>, UserSupport {
}
참고 사이트
프사 .. 제..
취저 입니당 ㅎㅎ
잘보고 가요!