JAVA/Spring

패스트캠퍼스 챌린지 4일차

발싸믹쏘스 2021. 11. 4. 13:09

1. H2 DB

RDB 중 하나로 설치하지 않아도 사용할 수 있는 데이터베이스 툴이다.
간단한 테스트 용도로 사용하기 좋으며 어플리케이션이 종료되면 관련된 모든 데이터가 소멸된다.

 

아래는 H2DB를 활용하여 테이블을 생성하고 데이터를 삽입하는 방법이다.

 

우선 DB에 활용할 Entity를 정의해주도록 한다.

 

dmaker.entity.Developer

@Getter
@Setter
@Builder
// @Builder가 들어가면 @NoArgsConstructor와 @AllArgsConstructor를 함께 넣어주어야 한다.
@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 experienceYears;
    private String memberId;
    private String name;
    private Integer age;

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;
}

위의 예제에서 볼 수 있듯이  @Builder가 들어가면 @NoArgsConstructor와 @AllArgsConstructor를 함께 넣어주어야 한다.

DeveloperLevel과 DeveloperSkillType의 경우 개발자의 실력과 보유 기술에 미리 지정해둔 값들만 삽입할 수 있도록 @Enumerated 어노테이션을 달아준다.

id에는 @GeneratedValue를 달아 Auto Increment 되도록 설정한다.

createdAt과 updatedAt 필드에는 각각 @CreatedDate와 @LastModifiedDate 어노테이션을 달아 데이터가 생성되고 수정될 때 자동으로 시간이 입력될 수 있도록 한다.

 

다음으로 DeveloperLevel과 DeveloperSkillType에 사용할 문자열 값들을 서술해준다.

 

dmaker.type.DeveloperLevel

@Getter
@AllArgsConstructor
public enum DeveloperLevel {
    NEW("신입 개발자"),
    JUNIOR("주니어 개발자"),
    JUNGNIOR("중니어 개발자"),
    SENIOR("시니어 개발자")
    ;

    private final String description;
}

dmaker.type.DeveleoperSkillType

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

    private final String description;
}

 

다음에는 입력한 값들이 DB에 저장될 수 있도록 JpaRepository를 이용한 Repository를 만들어준다. 관련된 내용은 추후에 다룰 예정이다.

 

dmaker.repository.DeveloperRepository

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

 

로직을 정의할 Service를 생성한다.

 

dmaker.service.DMakerService

@Service
@RequiredArgsConstructor
public class DMakerService {
    private final DeveloperRepository developerRepository;

    @Transactional
    public void createDeveloper(){
        // Builder를 통해 각각의 데이터들을 삽입해준다.
        Developer developer = Developer.builder()
                .developerLevel(DeveloperLevel.JUNIOR)
                .developerSkillType(DeveloperSkillType.FRONT_END)
                .experienceYears(2)
                .name("Harry")
                .age(31)
                .build();

        // 작성된 developer 객체를 developerRepository를 통해 DB에 저장한다.
        developerRepository.save(developer);
    }
}

 

생성한 Service를 Controller에서 실행시켜준다.

 

dmaker.controller.DMakerController

@GetMapping("/create-developer")
public List<String> createDeveleoper() {
  // GET /create-developer HTTP/1.1
  log.info("GET /create-developer HTTP/1.1");

  dMakerService.createDeveloper();

  return Collections.singletonList("Harry");
}

 

 

본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr