✔ Java 11
✔ Gradle 7
✔ Spring boot 2.6.3
1. gradle 추가
김영한님의 querydsl 적용 방법으로 적용했다.
ref. https://www.inflearn.com/questions/219898
build.gradle
// querydsl 추가부분
buildscript {
dependencies {
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
}
}
plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
// querydsl 추가부분
apply plugin: "com.ewerk.gradle.plugins.querydsl"
...
dependencies {
//querydsl
implementation 'com.querydsl:querydsl-jpa'
implementation 'com.querydsl:querydsl-apt'
...
}
tasks.named('test') {
useJUnitPlatform()
}
// querydsl 추가부분
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main {
java {
srcDirs = ['src/main/java', querydslDir]
}
}
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
configurations {
querydsl.extendsFrom compileClasspath
}
적용을 완료 했다면,
Gradle > build > clean
Gradle > build or Gradle > other > complieQuerydsl
이 두개를 순서대로 진행한다.
clean을 통하여 build 폴더를 삭제하고 다시 build를 통하여 build한다.
Gradle > other > complieQuerydsl이 추가되어 있는 걸 확인할 수 있다!
Q 파일 경로 확인
build > generated > querydsl
2. Config - QueryDslConfig 추가
JPAQueryFactory를 사용하기 위해 config를 추가한다.
config > QueryDslConfig.java
@Configuration
public class QueryDslConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory queryFactory(){
return new JPAQueryFactory(entityManager);
}
}
3. User Repository - QuerydslRepositorySupport 상속 받기
entity > user > repository > UserMinjRepositoryExtension.java
public interface UserMinjRepositoryExtension {
}
QuerydslRepositorySupport를 사용하기 위해 먼저 인터페이스를 구현하고 해당 인터페이스를 리포지토리 인터페이스에 상속해준다.
해당 인터페이스에선 querydsl에서 구현할 메소드를 추상 메소드로 적어준다.
entity > user > repository > UserRepository.java
public interface UserMinjRepository extends CrudRepository<UserMinj, Long>, UserMinjRepositoryExtension {
UserMinj save(UserMinj userMinj);
}
UserRepository에선 Extension 인터페이스를 상속받는다.
entity > user > repository > UserRepositoryImpl.java
public class UserMinjRepositoryImpl extends QuerydslRepositorySupport implements UserMinjRepositoryExtension {
private final JPAQueryFactory queryFactory;
public UserMinjRepositoryImpl(JPAQueryFactory jpaQueryFactory) {
super(UserMinj.class);
this.queryFactory = jpaQueryFactory;
}
}
QueryDSL을 사용하기 위해 QuerydslRepositorySupport을 상속받는다.
그리고 추상 메소드를 구현하기 위해 앞에서 추가한 인터페이스인 UserMinjRepositoryExtension을 추가한다.
3. QueryDSL로 update 쿼리문 작성
entity > user > repository > UserMinjRepositoryExtension.java
public interface UserMinjRepositoryExtension {
void updateUser(long id, UpdateUserRequestDto updateUserRequestDto);
}
인터페이스에서 추상 메소드를 작성한다.
entity > user > repository > UserRepositoryImpl.java
@Override
public void updateUser(long id, UpdateUserRequestDto updateUserRequestDto) {
queryFactory.update(userMinj)
.set(userMinj.user_password, updateUserRequestDto.getUser_password())
.set(userMinj.user_name, updateUserRequestDto.getUser_name())
.where(userMinj.id.eq(id))
.execute();
}
해당 클래스에서 메소드를 구현하면 된다.
참고!!!
Q파일을 import받아 사용하고 싶었는데 엔티티 이름을 그냥 치고 import하려니 QUserMinj를 임포트하라고 계속 떠 삽질하게 되었다. 내가 import하고 싶었던 건 QUserMinj.usrMinj이다.
아마도 내가 자바를 아직 잘 모르고 querydsl도 몰라서 생겼던 삽질이라 생각된다.
import를 할 때 꼭 import 뒤에 static이 붙어야지만 생성자를 사용하지 않고 사용할 수 있다.
import static com.second.spring_study.entity.user_minj.QUserMinj.userMinj;
'Study > Spring' 카테고리의 다른 글
[Spring boot | MySQL] Intellij에 MySQL 연결하기 | 모든 프로젝트에서 연결된 디비 연결하기 (0) | 2022.02.11 |
---|---|
Controller 예외 처리 | Spring Spring boot JPA Study (1) | 2022.02.11 |
회원 수정 기능 구현 | Spring Spring boot JPA Study (1) | 2022.02.10 |
회원 조회 기능 | Spring Spring boot JPA Study (0) | 2022.02.08 |
회원 삭제 기능 | Spring Spring boot JPA Study (0) | 2022.02.08 |
댓글