웹개발 환경 세팅 - 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

+ Recent posts