kl个人博客 首页>>ORM/持久化>>Querydsl结构化查询之jpa

Querydsl结构化查询之jpa

Querydsl结构化查询之jpa

前言碎语

Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句。它采用API代替拼凑字符串来构造查询语句,不仅可以结合jpa等用来查询关系型数据,还提供了相关的api用来查询mongodb,lucene的数据

相关地址

官网地址:http://www.querydsl.com/

github项目地址:https://github.com/querydsl/querydsl

开发指南:http://www.querydsl.com/static/querydsl/latest/reference/pdf

进入正题

下面主要描述如何在使用jpa的项目中,整合Querydsl,带来更好的结构化的更灵活的查询

1.首先加入maven依赖

        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>4.1.4</version>
        </dependency>

        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>4.1.4</version>
        </dependency>

2.添加build插件,插件会帮你把标识为@Entity的实体生成相关的查询对象,比如User,会生成QUser查询对象

<project>
  <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>
            <outputDirectory>target/generated-sources/java</outputDirectory>
            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
          </configuration>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  </build>
</project>

3.完成以上步骤,就可以查询初体验了(别忘了,build下项目生成查询实体)

        QCaFileManage qfileManage=QCaFileManage.caFileManage;//插件生成的查询对象
        QMgmPtpAttachs mgmPtpAttachs=QMgmPtpAttachs.mgmPtpAttachs;//插件生成的查询对象
        JPAQuery jpa=new JPAQuery(em);//em是jpa EntityManager 对象
        jpa.from(qfileManage,mgmPtpAttachs).where(qfileManage.name.eq("a"),mgmPtpAttachs.attachNo.like("bbb"));
        List result=jpa.fetchResults().getResults();

        CaFileManage fileManage=new JPAQueryFactory(em).selectFrom(qfileManage).where(qfileManage.user.in("")).fetchFirst();


后记:这里只是一个简单查询实例,实际使用时你会发现Querydsl的链式api很灵活丰富,用起来很爽


kl个人博客