Querydsl공부를 하며 잊지않게 기록하는 게시글 입니다.
프로젝트 생성 후
Gradle 전체 설정
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'org.springframework.boot' version '2.6.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
//querydsl 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
id 'java'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
//querydsl 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
//querydsl 추가 끝
동작 확인을 위한 테스트 컨트롤러
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
동작 확인을 위한 테스트 엔티티
@Entity
@Getter
@Setter
public class Hello {
@Id
@GeneratedValue
private Long id;
}
검증용 Q 타입 생성
compileQuerydsl 더블 클릭
build -> generated -> 같은 패키지항목에 Q타입 생성 확인
엔티티 생성
멤버와 팀사이의 ManyToOne 관계
@Entity
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of = {"id", "username", "age"})
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
private String username;
private int age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
public Member(String username) {
this(username, 0);
}
public Member(String username, int age) {
this(username, age, null);
}
public Member(String username, int age, Team team) {
this.username = username;
this.age = age;
if (team != null) {
changeTeam(team);
}
}
private void changeTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
}
@Entity
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of = {"id", "name"})
public class Team {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
public Team(String name) {
this.name = name;
}
}
'공부기록 > 자바 스프링' 카테고리의 다른 글
Querydsl 공부 <기본 문법> (0) | 2022.06.07 |
---|---|
JPA 연관관계 (0) | 2022.04.17 |
스프링 아이템기능 리팩터링 (0) | 2022.03.19 |
스프링 아이템기능 구현, 단어 뒤집기, 파파고 API (0) | 2022.03.12 |
스프링 룰렛기능 만들기 (가챠시스템), 자바 난수 설정, 확률설정 (0) | 2022.03.09 |