[java] Querydsl을 사용하여 CRUD 작업 수행하기

이번 포스트에서는 Java 언어에서 Querydsl을 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행하는 방법에 대해 알아보겠습니다.

개요

Querydsl은 Java 언어를 위한 유연하고 강력한 SQL 조회 라이브러리입니다. 이 라이브러리를 사용하면 type-safe한 쿼리를 작성할 수 있으며, 컴파일 시점에 오류를 잡아내는 장점이 있습니다. 또한, ORM(Object Relational Mapping) 프레임워크와의 연동이 용이하며, 복잡한 쿼리를 더 간결하게 작성할 수 있습니다.

설정

먼저, Querydsl을 사용하기 위해 프로젝트에 종속성을 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
    <!-- Querydsl -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
        <version>4.4.0</version>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>4.4.0</version>
    </dependency>
    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.12.Final</version>
    </dependency>
    <!-- Spring Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

엔티티 클래스 정의

CRUD 작업을 수행할 엔티티 클래스를 정의합니다. 예를 들어, User라는 엔티티 클래스를 다음과 같이 작성합니다.

@Entity
@Table(name = "users")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;
    
    // Getters and Setters
}

Repository 인터페이스 생성

Querydsl을 사용하기 위해 Repository 인터페이스를 생성해야 합니다. 예를 들어, 위에서 정의한 User 엔티티 클래스를 다루는 UserRepository 인터페이스를 다음과 같이 작성합니다.

import com.querydsl.core.types.dsl.StringExpression;
import com.querydsl.core.types.dsl.StringPath;
import com.querydsl.jpa.impl.JPAQuery;

public interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {

    default List<User> search(String keyword) {
        QUser user = QUser.user;
        JPAQuery<User> query = new JPAQuery<>(this.getEntityManager());

        query.select(user)
                .from(user)
                .where(user.name.containsIgnoreCase(keyword));

        return query.fetch();
    }
}

쿼리 사용하기

이제 CRUD 작업을 수행하기 위해 Querydsl을 사용할 수 있습니다.

조회

List<User> userList = userRepository.findAll(); // 모든 사용자 조회

User user = userRepository.findById(1L).orElse(null); // ID로 사용자 조회

List<User> searchedUserList = userRepository.search("john"); // 이름으로 사용자 조회

생성

User user = new User();
user.setName("John Doe");

userRepository.save(user);

수정

User user = userRepository.findById(1L).orElse(null);
if (user != null) {
    user.setName("John Smith");
    userRepository.save(user);
}

삭제

userRepository.deleteById(1L);

마치며

이번 포스트에서는 Querydsl을 사용하여 Java 언어에서 CRUD 작업을 수행하는 방법에 대해 알아보았습니다. Querydsl을 사용하면 type-safe한 쿼리 작성을 통해 안정성을 높일 수 있으며, 복잡한 쿼리를 더 간결하게 작성할 수 있습니다. 더 자세한 내용은 Querydsl 공식 문서를 참고하시기 바랍니다.

참고 자료