QueryDSL——比SpringData JPA更面向对象 - 掘金 (juejin.cn)
Spring Boot (六): 为 JPA 插上翅膀的 QueryDSL - 极客挖掘机 - 博客园 (cnblogs.com)
简介
注解
@Entity(name=“xxx”)
用与实体类上面,建立与表的映射
@Id
主键属性
@Column(name=“xxx”)
建立属性与字段的映射,当属性名与字段名一致时会自动映射
@Query
?号后面的数字对应方法的参数列表顺序
接口
JpaRepository
分页
排序
Sort
动态查询
springboot使用querydsl
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.22</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<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>
关联查询
一对一
@OneToOne参数
多对多
querydsl
/**
\* dsl条件查询选修了数学并且年龄18岁以上的学生姓名
*/
@Test
@Transactional
void dsl1(){
QStudent student = QStudent.student;
QSubject subject = QSubject.subject;
List<String> fetch = jpaQueryFactory.select(student.name).from(student).innerJoin(student.subjects,subject)
.where(student.age.gt(18).and(subject.subjectName.eq("化学"))).fetch();
fetch.forEach(e-> System.out.println(e));
}
动态查询
public List<LessonModel> findLessonDynaList(String name, Date startDate, String address, String userId) throws ParseException {
QLessonModel lessonModel = QLessonModel.lessonModel;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// 动态查询示例
BooleanBuilder builder = new BooleanBuilder();
if (!StringUtils.isEmpty(name)){
builder.and(lessonModel.name.like("%" + name + "%"));
}
if (startDate != null) {
builder.and(lessonModel.startDate.between(simpleDateFormat.parse("2018-12-31 00:00:00"), new Date()));
}
if (!StringUtils.isEmpty(address)) {
builder.and(lessonModel.address.contains(address));
}
if (!StringUtils.isEmpty(userId)) {
builder.and(lessonModel.userId.eq(userId));
}
return queryFactory.selectFrom(lessonModel).where(builder).fetch();
}
bug记录
出现这个错误的原因是在接口自定义方法中,定义了不符合规范的方法