一、 QueryDSL简介
QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。
Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。
借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。
官网地址:点击进入
二、 配置QueryDSL 到 SpringBoot项目
1. maven 依赖引入
<!--query dsl-->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
</dependency>
<!--query dsl end-->
2.引入插件
<!--该插件可以生成querysdl需要的查询对象,执行mvn compile即可,否则项目会报错-->
<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>
执行mvn compile之后,即可使用,使用方式如下:
3. 构建实体类
# 城市类:
@Entity
@Table(name = "t_city")
public class TCity {
//省略JPA注解标识
private Long id;
private String name;
private String state;
private String country;
private String map;
}
# 旅馆类:
@Entity
@Table(name = "t_hotel")
public class THotel {
//省略JPA注解标识
private Integer id;
private String name;
private String address;
//关联城市的id主键
private Long city;
}
3. 单表动态分页查询
// 查找出Id小于3,并且名称带有`shanghai`的记录.
@Resource
private JpaQueryFactory jpaQueryFactory;
...
QTCity qtCity = QTCity.tCity;;
List<TCity> citys = jpaQueryFactory.select(qtCity)
.from(qtCity).where(qtCity.id.lt(3)
.and(qtCity.name.like("shanghai"))
.limit(pageSize)
.offset((pageNum - 1) * pageSize)
.orderBy(qtCity.id.desc())
.fetchAll();
...
4. 多表动态查询
QueryDSL 支持多表查询,这里详解,后期会补充进来.
https://www.jianshu.com/p/2b68af9aa0f5