ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링 스터디] 2주차
    Spring 2021. 3. 20. 18:00

     

    * 참고 책 ) 코드로 배우는 스프링 부트 웹 프로젝트

     

    1. 프로젝트 준비 설정

    1) intelliJ Ultimate 버전 다운(학교 이메일로 등록시 1년간 무료)

    2) MariaDB 설치 설정 (root 비밀번호 기억)

     

    2. 스프링 프로젝트 생성과 maria 데이터베이스 연결

    1) HeidiSQL 에서 mariaDB 설정

    2) Spring Initializr 로 스프링 부트 프로젝트 생성

    • Type:Gradle / Packaging:War 로 설정
    • Spring Boot DevTools / Lombok / Spring web / Spring Data JPA 설정

    3) MariaDB를 위한 JDBC 드라이버 설정

    mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client

     

    Maven Repository: org.mariadb.jdbc » mariadb-java-client

    JDBC driver for MariaDB and MySQL VersionRepositoryUsagesDate2.7.x2.7.2Central24Jan, 20212.7.1Central32Nov, 20202.7.0Central35Sep, 20202.6.x2.6.2Central38Jul, 20202.6.1Central13Jun, 20202.6.0Central39Mar, 20202.5.x2.5.4Central22Jan, 20202.5.3Central14Jan,

    mvnrepository.com

    최신 버전의 MariaDB Java Client에서 Gradle 관련 JDBC드라이버 복사 후, 

    build.gradle 파일의 dependencies 항목에 추가한다.

    -> 작은 코끼리 아이콘 나오면 클릭(라이브러리의 변경 반영을 위해)

     

    4)  스프링 프로젝트 내 데이터베이스 설정

    src/main/resources/application.properties 파일에서 

     

    spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
    spring.datasource.url = jdbc:mariadb://localhost:3306/bootex
    spring.datasource.username = bootuser
    spring.datasource.password = bootuser

     

     

    3. Spring Data JPA 란?

    Spring Data JPA를 알기전에 JPA를 알아야하며,

    JPA를 알기 전, ORM의 개념을 알아야 한다.

    ORM = Object Relational Mapping

    객체지향과 관계형 데이터베이스의 유사한 특징이 있기 때문에 이를 이용해 매핑한다.

    즉, 객체를 관계로 매핑.

     

    JPA는 ORM을 "JAVA"에 맞게 사용할 수 있도록 하는 도구?이다. 

    보통 이 JPA를 사용하기 위해 스프링 부트에서 Hibernate라는 프레임워크를 사용.

    더 쉽게 말하자면 JPA는 인터페이스에 불과하고, Hibernate는 이 인터페이스를 실행하기 위한 기능을 제공하는 class역할(jpa의 구현체)이라고 볼 수 있다. 

     

    그럼 Spring Data JPA는 무엇인가?

    JPA(Hibernate)를 쓰기 편하게 만들어 논 모듈이다!

     

    4. Spring Data JPA 사용법

    1) JPA를 통해서 관리하게 되는 객체를 위한 엔티티 클래스 만들기
    2) 엔티티 객체들을 처리하는 기능을 가진 Repository 만들기

     

    먼저 엔티티 클래스를 만들기 위해 entity 패키지를 추가, 특정 이름의 class를 만든다.(테이블과 같은 구조처럼)

    package /*설정한 패키지*/;
    
    import lombok.*;
    import javax.persistence.*;
    
    @Entity
    @Table(name= "/*테이블이름*/")
    @ToString
    @Getter
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public class /*클래스이름*/ {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long /*pk 이름*/;
    
        @Column(length=200, nullable=false)
        private String /*속성 이름*/;
    }

     

    이때, 자동으로 필요한 테이블을 생성하거나 JPA를 이용할 때 발생하는 sql 등을 확인 하기 위해 

    application.properties 파일에서

    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.properties.hibernate.format_sql=true
    spring.jpa.show-sql=true
    

    추가

     

    그리고, repository 패키지를 생성, 특정 이름의 repository 인터페이스 생성하여 JpaRepository 인터페이스 상속한다.

     

    package org.zerock.ex2.repository;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.zerock.ex2.entitiy./*entity class 명*/;
    
    
    public interface /*특정 Repository 명*/  extends JpaRepository</*class 명*/, Long>{
        
    }
    

     

    여기서 JpaRepository</*class 명*/, Long>의 첫번째 파라미터는 앞에서 설정한 entity 클래스이고, 두번째 파라미터는 pk(id)를 가리킨다.

     

    테스트파일을 만들어, curd(insert, select, update, delete)연습할 수 있다.

     

     

    5. 페이징/정렬 처리하기

    API에서 지원해주기 때문에 매우 편하다.

    페이지 처리하기 위해 org.springframework.data.domain.Pageable 인터페이스 추가해야한다.

    또한 이는 인터페이스 이기 때문에 실제 객체를 생성할 때 구현체인 org.springframework.data.domain.pageRequest 클래스 사용. 

     

    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;

     

    Pageable pageable = PageRequest.of(int page, int size, Sort sort); 

    Page<엔티티 타입> result = 특정repository.findAll(pageable);

     

    참고로 page는 0부터 시작하기 때문에 0이 1페이지.

     

     

    6. @Query 어노테이션

    @Query 대신 쿼리 메서드도 사용할 수 있으나 주로 @Query를 많이 씀.

     

     @Query = sql과 유사하게 엔티티 클래스의 정보를 이용해서 작성하는 기능

    -JPQL로 작성

    -파라미터 사용시 ':파라미터이름' 형식으로 

     

     

     

     

Designed by Tistory.