간단한 H2 DB 구현 실습

김태은·2022년 4월 28일
0

스프링 프로젝트 생성, H2 DB 연결


1.https://start.spring.io/ 링크로 들어가서 옵션을 선택한 뒤, add dependencices를 선택하고 원하는 기능을 추가하고 generate를 한다.


2. 다운한 파일을 인텔리제이에서 오픈하고, JDK를 지정해준다.

  1. controller, dto, entity, repository, service, type 패키지를 추가한다.

  2. DMakerController를 작성한다. Controller는 @RestController로 만든다.

    @RestController = @Controller, @ResponseBody

    • @Controller : @Component의 타입 중 하나
    • @ResponseBody : 사용자의 요청을 받아 json으로 응답을 해줌
  • controller가 잘 동작하는지 log를 활용하여 테스트한다.

H2 설정

  1. application.properties 를 application.yml로 변경한다.

  1. 다음과 같이 yml을 작성한 뒤 H2 console을 사용할 수 있는 JDBC URL정보를 복사한다.

jdbc:h2:mem:1f9d34c5-3068-4c62-8bbd-a637235629d5

  1. h2-console로 접근한다.
  2. 다음과 같이 페이지가 뜨고, JDBC URL에 복사한 정보를 입력한 뒤 Connect를 클릭한다.
  • 성공적으로 연결이 되었다.

H2 DB Test

  1. Debeloper entity를 작성한다.
package com.fastcampus.programming.dmaker.entity;

import com.fastcampus.programming.dmaker.type.DeveloperLevel;
import com.fastcampus.programming.dmaker.type.DeveloperSkillType;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import javax.persistence.*;
import java.time.LocalDateTime;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Developer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;

    @Enumerated(EnumType.STRING)
    private DeveloperLevel developerLevel;

    @Enumerated(EnumType.STRING)
    private DeveloperSkillType developerSkillType;

    private Integer experience;
    private String memberId;
    private String name;
    private Integer age;

    @CreatedDate
    private LocalDateTime createAt;

    @LastModifiedDate
    private LocalDateTime updateAt;
    

}
  • @Builder를 사용하기 위해 @NoArgsConstructor, AllArgsConstructor 필요
package com.fastcampus.programming.dmaker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class DmakerApplication {

	public static void main(String[] args) {
		SpringApplication.run(DmakerApplication.class, args);
	}

}

자동으로 생성시점(createAt)과 수정시점(updateAt)저장하기 위해

  • Developer 엔티티에 @EntityListeners(AuditingEntityListener.class)추가
  • DmakerApplication에 @EnableJpaAuditing 추가
  1. DeveloperLevel, DeveloperSkillType enum을 작성한다.
package com.fastcampus.programming.dmaker.type;


import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum DeveloperLevel {

    NEW("신입 개발자"),
    JUNIOR("주니어 개발자"),
    SENIOR("시니어 개발자");

    private final String description;
}
package com.fastcampus.programming.dmaker.type;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum DeveloperSkillType {
    BACK_END("백엔드 개발자"),
    FRONT_END("프론트엔드 개발자"),
    FULL_STACK("풀스택 개발자");

    private final String description;
}
  1. DeveloperRepository를 작성한다.
package com.fastcampus.programming.dmaker.repository;

import com.fastcampus.programming.dmaker.entity.Developer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface DeveloperRepository
        extends JpaRepository<Developer, Long> {



}
  • public interface 이름 extends JpaRepository <엔티티 ID, 유형> 형식으로 작성한다.
  • 이 인터페이스가 JpaRepository임을 나타내기 위해 @Repository어노테이션을 붙여줘야 한다.
  1. DeveloperService를 작성한다.
package com.fastcampus.programming.dmaker.service;

import com.fastcampus.programming.dmaker.dto.CreateDeveloper;
import com.fastcampus.programming.dmaker.entity.Developer;
import com.fastcampus.programming.dmaker.repository.DeveloperRepository;
import com.fastcampus.programming.dmaker.type.DeveloperLevel;
import com.fastcampus.programming.dmaker.type.DeveloperSkillType;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@Service
@RequiredArgsConstructor//기본 생성자를 자동으로 만들어줌
public class DMakerService {
    //DI(의존성 주입)
    private final DeveloperRepository developerRepository;

    @Transactional
    public void createDeveloper(CreateDeveloper.Request request){
        Developer developer = Developer.builder()
                .developerLevel(DeveloperLevel.JUNIOR)
                .developerSkillType(DeveloperSkillType.FRONT_END)
                .experienceYears(2)
                .name("Olaf")
                .age(5)
                .build();
        developerRepository.save(developer);
    }
}
  • Service에 Repository 주입 :@RequiredArgsConstructor, private final DeveloperRepository developerRepository
  1. DMakerController를 작성한다.
 @GetMapping("/create-developers")
    public List<String> createDevelopers(){
        // GET /developers HTTP/1.1

        dMakerService.createDeveloper();

        return Collections.singletonList("Olaf");
    }
  • controller에 service 주입 후 사용

  • 주입 : @RequiredArgsConstructor , private final DMakerService dMakerService (@Autowired private DMakerService dMakerService와 같은 역할)

  1. 스프링을 실행한 뒤, JDBC URL 정보 복사 후 http://localhost:8080/h2-console 에서 붙여넣기 후 db에 접근 -> http://localhost:8080/create-developers 에 들어간 뒤 h2 db 확인

  • developer 테이블이 생성되었고, 데이터가 정상적으로 추가되었다.

정리 : 엔티티 클래스 만들기 -> Repository 만들기 -> Service에서 호출 -> Controller에서 사용

SQL 확인

  • application.yml 수정
  • console에서 확인 가능

0개의 댓글