SpringDataJpa使用QueryDSL实现动态SQL功能
添加依赖:
<!--queryDSL-->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
添加maven插件:
<!--queryDSL-->
<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>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
</plugin>
注入JPAQueryFactory:
/**
* 作者:guoyzh
* 时间:2019/12/17 9:00
* 功能:配置QueryDSL 注入JPAQueryFactory
*/
@Configuration
public class QueryDSLConfig {
@Autowired
private EntityManager entityManager;
@Bean
public JPAQueryFactory getQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
日常使用:
@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryDSLTests {
@Autowired
JPAQueryFactory mFactory;
@Before
public void before() {
}
@Test
public void testQuery() {
QStDepartment department = QStDepartment.stDepartment;
StDepartment info = mFactory.selectFrom(department) // 查哪张表
.where(department.id.eq("D00003"), department.attachedcompany.like("C0010%")) // 查询条件
.orderBy(department.id.desc()) // 排序规则
.fetchFirst();
System.out.println(JsonUtils.toJson(info));
}
@Test
public void testPage() {
QStDepartment department = QStDepartment.stDepartment;
// page必须从1开始
PageRequest request = PageRequest.of(1, 10);
List<StDepartment> info = mFactory.selectFrom(department)
.offset(request.getPageNumber()) // 偏移量
.limit(request.getPageSize()) // 单页查询数量
.fetch();
System.out.println(info);
}
@Test
public void testJoin() {
QStDepartment department = QStDepartment.stDepartment;
QStCompany company = QStCompany.stCompany;
Tuple info = mFactory.select(department, company)
.from(department)
.innerJoin(company)
.on(department.attachedcompany.eq(company.id))
.where(department.id.eq("D00003"))
.fetchFirst();
System.out.println(info.get(department));
}
}