QueryDSL
한번 해보라해서 해보는 QueryDSL
build.gradle 설정은 여러가지가 있나보다
그런데 여러가지 찾아본 결과 plugins 의 설정들은 이제 못쓰나보다
Sprinboot 3.x 버젼 이상은 QueryDSL 5.0.0버젼 사용한다나
plugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
// id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" // ⭐ Querydsl 플러그인 사용 X
}
// ...
dependencies {
// ⭐ Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api" // 중요!!
annotationProcessor "jakarta.persistence:jakarta.persistence-api" // 중요!!
}
tasks.named('test') {
useJUnitPlatform()
}
// === ⭐ QueryDsl 빌드 옵션 (선택) ===
def querydslDir = "$buildDir/generated/querydsl"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir)
}
clean.doLast {
file(querydslDir).deleteDir()
}
어디서 끌고 왔는지 기억이.. 안남..ㅋㅋ..
queryDSL은 application.properties 설정 필요없고
config 설정이나 하러 가자
# config.QueryDslConfig
@Configuration
@RequiredArgsConstructor
public class QueryDslConfig {
private final EntityManager em;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(em);
}
}
Application 설정
@SpringBootApplication
@EnableTransactionManagement // 이부분 추가
public class Querydsl3Application {
public static void main(String[] args) {
SpringApplication.run(Querydsl3Application.class, args);
}
}
다음은 entity나 만들러 가보자
그냥 JPA 에서 했던 설정 그대로 들고 왔다.
@Entity
@Getter
@Table(name = "PEOPLE")
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Setter
@DynamicInsert
@DynamicUpdate
public class People {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
}
그럼 build 에서 clean , other - complie 을 해주자
다른 분들은 complieQueryDSL 있던데
나는 왠지 없다 ㅋㅋㅋㅋㅋㅋ 몰러
이번엔 Repository 를 작성할건데
☆ JPA 와 QueryDSL 둘다 사용할 예정이다.
# JPA 와 QueryDSL 둘다 사용가능하게 한 Repository
@Repository
public interface PeopleRepository extends JpaRepository<People, Integer>, PeopleRepositoryCustom {
public List<People> findAllByNameContaining(String name);
}
# QueryDSL 레파지토리
@Repository
public interface PeopleRepositoryCustom {
List<People> findAllPeoples();
People findPeopleById(int id);
}
# QueryDSL 레파지토리를 implements 한 querydsl 작성하는 class
@Repository
@RequiredArgsConstructor
public class PeopleRepositoryImpl implements PeopleRepositoryCustom{
private final JPAQueryFactory jpaQueryFactory;
private final EntityManager entityManager;
private final QPeople qpeople = QPeople.people;
@Override
public List<People> findAllPeoples() {
return jpaQueryFactory.select(qpeople).from(qpeople).fetch();
}
@Override
public People findPeopleById(int id) {
return jpaQueryFactory.select(qpeople).from(qpeople)
.where(qpeople.id.eq(id))
.fetchOne();
}
}
보면 알겠지만
JPA - nameContaining 하나
QueryDSL - 전체조회 , 상세조회 두개
이런식으로 있다.
그럼 Service 로 가보자
@Service
public class PeopleService {
@Autowired
PeopleRepository peopleRepository;
// JPA 레파지토리
public List<People> findAllByNameContaining(String name) {
return peopleRepository.findAllByNameContaining(name);
}
// QueryDSL 레파지토리 : 전체조회
public List<People> findAllPeoples() {
return peopleRepository.findAllPeoples();
}
// QueryDSL 레파지토리 : 상세조회
public People findPeopleById(int id) {
return peopleRepository.findPeopleById(id);
}
}
이제 자유로이 사용하시면 됩니다.
'SpringBoot' 카테고리의 다른 글
Springboot - 파일 여러장을 저장해보자 (1) | 2023.12.21 |
---|---|
SprinBoot - logback , log4jdbc 설정 (1) | 2023.12.17 |
Springboot - Security (1) | 2023.12.14 |
Springboot - NoSQL Redis (0) | 2023.12.14 |
윈도우 카프카 - Kafka 를 Springboot 에서 간단히 써보자 (1) | 2023.12.12 |