웹개발 환경 세팅 - 5. 프로젝트에 DB연동하기 with yml (https://noobnim.tistory.com/48 ) 에 이어서 진행합니다.
웹개발 환경 세팅 - 5. 프로젝트에 DB 연동하기 with yml
웹개발 환경 세팅 - 4. mariaDB 설치, 설치확인하기 (https://noobnim.tistory.com/47?category=847081) 에 이어서 진행합니다. 웹개발 환경 세팅 - 4. mariaDB 설치, 설치확인 하기 웹개발 환경 세팅 - 3. Spring..
noobnim.tistory.com
MariaDB를 기반으로 한 QueryDSL을 적용하도록 하겠습니다.
1. Build.gradle 설정
프로젝트의 build.gradle 파일을 열도록 합니다.
buildscript {
ext {
...
querydslPluginVersion = '1.0.10' // 플러그인 버전
}
repositories {
...
maven { url "https://plugins.gradle.org/m2/" } // 플러그인 저장소
}
dependencies {
...
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:${querydslPluginVersion}") // querydsl 플러그인 의존성 등록
}
}
springboot 설정시 세팅했던 buildscript 부분에 위와같이 3개의 항목을 각각 추가합니다.
위의 플러그인이 있어야 QClass 가 생성이 됩니다.
QClass는 Querydsl의 중심이 되는 역할을 하게 됩니다.
다음으로 dependencies 에 querydsl과 mariadb의 라이브러리를 추가하도록 합니다.
dependencies {
...
compile("com.querydsl:querydsl-jpa")
compile("com.querydsl:querydsl-apt")
...
}
지난 springboot 설정때 추가했던 dependencies 에 추가로 적용한 부분입니다.
querydsl 이 라이브러리를 추가하도록 합니다.
apply plugin: "com.ewerk.gradle.plugins.querydsl" // Plugin 적용
def querydslSrcDir = 'src/main/generated' // QClass 생성 위치
querydsl {
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslSrcDir
}
sourceSets {
main {
java {
srcDirs = ['src/main/java', querydslSrcDir]
}
}
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
configurations {
querydsl.extendsFrom compileClasspath
}
이제 위에서 설정한 Plugin을 사용할 Task를 추가합니다.
저는 gradle 5버전을 사용하고 있어서 하단에 compileQuerydsl 와 configurations 두 부분을 추가했습니다.
gradle 5버전을 사용하지 않으면 위의 두 부분은 추가가 필요없다고 합니다.
2. QuerydslConfiguration 생성
프로젝트의 src/main/java 경로에 QuerydslConfiguration 를 생성하도록 합니다.
저는 프로젝트 하단에 querydsl 패키지를 별도로 생성하여 추가하였습니다.
package com.webhome.querydsl;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Configuration
public class QuerydslConfiguration {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
QuerydslConfiguration 의 코드입니다.
추가시 프로젝트의 어느곳에서나 JPAQueryFactory 를 주입받아 querydsl 을 사용할 수 있다고 합니다.
3. 테스트를 위한 설정
저는 우선적으로 DB에 테스트용 테이블을 생성해둔 상태입니다.
제가 생성한 Member table을 기반으로 테스트를 진행합니다.
1) 엔티티 생성
package com.webhome.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="member")
public class Member {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String username;
@Column(name = "AGE")
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
제가 생성한 Member 테이블의 엔티티입니다.
@Entity 어노테이션으로 엔티티임을 명시합니다.
@Table ( name = "member" ) 생성한 테이블 명을 입력합니다.
@Id 는 해당 테이블의 키값임을 알리는 표시입니다.
@column 은 Member 테이블의 각 컬럼을 알리는 표시입니다.
2) Repository 생성
package com.webhome.repository;
import com.webhome.model.Member;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MemberRepository extends JpaRepository<Member, Long> {
}
테스트용으로 검증할 Repository를 생성합니다.
3) QClass 생성
Intellij의 우측 사이드에보시면 Gradle 항목이 보입니다.
Gradle > Tasks > other 에 보면 compileQuerydsl 이 보입니다. 더블클릭하여 실행하면
src/main/generated 항목 안에 위에서 생성한 엔티티와 같은 경로로 QClass 파일이 생성됩니다.
4) 데이터 추출
저는 우선적으로 제대로 연동되는지 만을 확인하기 위하여 RestController에 바로
Repository를 사용하여 데이터를 추출하였습니다.
package com.webhome.controller;
import com.webhome.model.Member;
import com.webhome.repository.MemberRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class HomeController {
//private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private MemberRepository memberRepository;
@RequestMapping("/")
public String index(){
List members = memberRepository.findAll();
return members.get(0).getUsername();
}
}
위와같이 입력하고나면 이제 설정은 끝났습니다.
서버를 실행하여 localhost에 접속하면
위와같이 테이블에 입력해둔 맴버의 이름이 표시됨을 확인 할 수 있습니다.
출처) https://jojoldu.tistory.com/372