前言碎语
Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句。它采用API代替拼凑字符串来构造查询语句,不仅可以结合jpa等用来查询关系型数据,还提供了相关的api用来查询mongodb,lucene的数据
相关地址
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();