为Spring Data Jpa配置Querydsl(spring + maven)

1 添加依赖

<dependencies>
    <!-- Querydsl 核心库 -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>5.0.0</version> <!-- 请使用与项目兼容的最新版本 -->
    </dependency>

    <!-- 注解处理器,用于生成 Q 类 -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- JPA 注解支持 -->
    <dependency>
        <groupId>jakarta.persistence</groupId>
        <artifactId>jakarta.persistence-api</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

2 配置编译插件(生成Q类)

<build>
    <plugins>
        <!-- 编译时生成 Q 类 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>17</source> <!-- 根据你的 JDK 调整 -->
                <target>17</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>com.querydsl</groupId>
                        <artifactId>querydsl-apt</artifactId>
                        <version>5.0.0</version>
                    </path>
                    <path>
                        <groupId>com.querydsl</groupId>
                        <artifactId>querydsl-jpa</artifactId>
                        <version>5.0.0</version>
                    </path>
                </annotationProcessorPaths>
                <compilerArgs>
                    <arg>-proc:only</arg>
                    <arg>-processor</arg>
                    <arg>com.querydsl.apt.jpa.JPAAnnotationProcessor</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

3 使用

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    private String username;

    private Integer age;

    private String status;
}

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

QUser user = QUser.user;

Predicate predicate = user.age.gt(25).and(user.status.eq("ACTIVE"));

List<User> result = userRepository.findAll(predicate);

发表回复

您的电子邮箱地址不会被公开。