Skip to content

erupt-dsl ORM 动态查询

QueryDSL 是一个通用的查询框架,专注于通过 Java API 构建类型安全的 SQL 查询。基于各种 ORM 框架以及 SQL 之上,查询方式类似于 SQL,用代码替代 SQL,erupt-dsl 将其集成进 Erupt 体系。

使用方法

1. Maven 配置

xml
<!-- dependencies 配置 -->
<dependency>
  <groupId>com.github.wjw465150</groupId>
  <artifactId>erupt-dsl</artifactId>
  <version>1.7.3</version>
</dependency>
<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-jpa</artifactId>
  <version>4.4.0</version>
</dependency>
<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-apt</artifactId>
  <version>4.4.0</version>
  <scope>provided</scope>
</dependency>

<!-- build → plugins 配置 -->
<plugin>
  <groupId>com.mysema.maven</groupId>
  <artifactId>apt-maven-plugin</artifactId>
  <version>1.1.3</version>
  <executions>
    <execution>
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <!-- 生成的 Q 类存放位置 -->
        <outputDirectory>target/generated-sources/java</outputDirectory>
        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
        <options>
          <!-- 设定 QueryDSL 要排除的包(逗号分割) -->
          <querydsl.excludedPackages>xyz.erupt.upms,xyz.erupt.bi</querydsl.excludedPackages>
        </options>
      </configuration>
    </execution>
  </executions>
</plugin>

2. Bean 注入

java
@PersistenceContext
private EntityManager entityManager;

@Bean
public JPAQueryFactory jpaQueryFactory() {
    return new JPAQueryFactory(entityManager);
}

3. Q 类生成

执行 Maven process 命令,生成可调用的 Q 类。

Q 类是以 Q 开头的 JPA 实体类,用于 DSL 调用。

4. 使用方式

java
@Resource
private JPAQueryFactory jpaQueryFactory;

public void test() {
    // Q 开头的类为生成的快捷查询类
    List<String> names = jpaQueryFactory
        .select(QEruptUser.eruptUser.name)
        .from(QEruptUser.eruptUser)
        .fetch();
    names.forEach(System.out::println);
    // 输出:erupt / guest / test
}

Released under the Apache-2.0 License.