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

웹개발 환경 세팅 - 1.Intellij Community 설치하기 (https://noobnim.tistory.com/19) 에 이어서 진행합니다.

 

웹개발 환경 세팅 - 1. Intellij Community 설치하기

웹 개발 환경 설정부터 공부를 시작하기까지 기록을 하기위해 글을 남깁니다. Intellij는 커뮤니티와 울티메이트 두가지 버전으로 나뉘며 울티메이트 버전은 학교의 학생 이메일 (ac.kr) 인증을 받으면 얼마간 무..

noobnim.tistory.com

 

 

 

실행 초기의 화면입니다.

"Create New Project"를 선택합니다.

 

 

 

Gradle 빌드 툴로 진행할 예정입니다.

Gradle > Java 선택 후 Next 클릭합니다.

 

 

 

GroupId, ArtifactId 의 자세한 설명은 서토리님의 글 (https://seotory.tistory.com/32)을 참조합니다.

 

GroupId : 프로젝트의 고유한 이름으로 만들며, 일반적인 패키지 네이밍툴을 따른다.

ex) org.apache.maven, org.apache.commons

ArtifactId : jar 파일에서 버전정보를 뺀 이름이다. 소문자를 사용하며 특수문자를 넣지 않는것이 일반적인 규칙

Version : 프로젝트 스냅샷의 최초 버전

위 사항을 원하는 명칭으로 입력 후 Next 클릭 합니다.

 

 

 

확인 후 Finish를 클릭합니다.

 

 

 

사용 팁과 함께 프로젝트가 생성됩니다. 

 

프로젝트 생성을 마치며 차후 진행되는대로 정리하도록 하겠습니다.

+ Recent posts