[SpringBoot] 스프링부트 프로젝트 생성 후 JPA 사용 및 테스트하기1 엔티티 설정 및 Insert 테스트~JPA 사용방법~(만들기 스프링부트3.25 )_IntelliJ IDEA 2024.1JDK17 spring-boot test--++
* 초기 세팅 (개발환경) 및 설정
https://rockbottomdevbus.blogspot.com/2024/04/springboot-1-325-intellij-idea-20241.html
* 엔티티 설정
JPA에서 엔티티란 DB 테이블에 대응하는 하나의 클래스라고 생각하면 된다. @Entity 가 붙은 클래스는 JPA가 관리하며 DB의 테이블과 자바 클래스가 매핑이 된다. 엔티티와 매핑할 테이블을 지정한다. 식별키(PK, Primary Key) 로 매핑한다
1. domain 패키지 생성 >> 경로 : /main/java/{pakage name}/domain
2. 테이블 정의하는 VO 클래스 파일 생성
클래스 생성 >> 1번 위치에 Board 클래스 생성 = "DB관련 VO같은 놈으로 테이블 정의"
-- Board.java
package org.zerock.b01.domain;
import jakarta.persistence.*;
import lombok.*;
@Entity // 엔티티 선언
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Board{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
/*
* IDENTITY : 데이터베이스에 위임 (AUTO_INCREMENT)
* SEQUENCE : 데이터베이스 시퀸스 오브젝트를 사용 @SequenceGenerator 필요함
* Table : 키 생성용 테이블 사용. 모든 db에 사용 - @TableGenerator
* Auto : 쓰는 SQL에 따라서 자동 지정됨 기본값
* */
private Long bno;}private String title;
private String content;
private String writer;
3. 모든 테이블에서 사용하는 공통 클래스 생성
- 클래스 생성 >> 1번 위치에 BaseEntity 클래스 생성
-- BaseEntity .java
package org.zerock.b01.domain;
/*
baseEntity 설정할 내용... 모든 테이블에서 공통적으로 사용하는 컬럼을 작성
@MappedSuperClass를 사용하여 공통 속성 적용
이를 통해서 공통으로 사용되는 컬럼을 지정하여 해당 클래스를 상속하여 사욜 할 수있음
*/
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDate;
@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
@Getter
abstract class BaseEntity {
//시간 설정 - 등록, 수정 시간설정
//생성 시간
@CreatedDate
@Column(name = "regdate", updatable = false)
private LocalDate regdate;
@LastModifiedDate
@Column(name = "moddate")
private LocalDate moddate;
}
4. {project name}Application.java 파일에 @EnableJpaAuditing 어노테이션 추가
-- B01Application.java
package org.zerock.b01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing // AuditingEntityListner 활성화 어노테이션
public class B01Application {
public static void main(String[] args) {
SpringApplication.run(B01Application.class, args);
}
}
5. Borad.java에 BaseEntity 상속 및 컬럼설정
-- Board.java
package org.zerock.b01.domain;
import jakarta.persistence.*;
import lombok.*;
@Entity // 엔티티 선언
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Board extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
/*
* IDENTITY : 데이터베이스에 위임 (AUTO_INCREMENT)
* SEQUENCE : 데이터베이스 시퀸스 오브젝트를 사용 @SequenceGenerator 필요함
* Table : 키 생성용 테이블 사용. 모든 db에 사용 - @TableGenerator
* Auto : 쓰는 SQL에 따라서 자동 지정됨 기본값
* */
private Long bno;
@Column(length = 50, nullable = false)
private String title;
@Column(length = 2000, nullable = false)
private String content;
@Column(length = 50, nullable = false)
private String writer;
}
* 테스트 설정 + C(insert)
0. repository (메인) 패키지 생성 >> 경로 : /main/java/{pakage name}/repository
- 인터페이스 파일 생성 >> 0번 위치에 BoardRepository.java 인터페이스 파일 생성 = "쿼리실행을 위한 인터페이스파일"
--BoardRepository.java
package org.zerock.b01.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.b01.domain.Board;
public interface BoardRepository extends JpaRepository<Board, Long> {
// <Board, Long> - 엔티티 타입 , id
}
1. repository (테스트) 패키지 생성 >> 경로 : /test/java/{pakage name}/repository
- 클래스 파일 생성 >> 1번 위치에 BoardRepositoryTests.java 파일 생성 = "쿼리 테스트를 위한 파일 클래스 생성"
2. Insert (Create)
- BoardRepositoryTests.java 파일에 Insert Test 메서드 추가
-- 테스트 실행 시 table 생성 후 column 100개 추가됨
-- BoardRepositoryTests.java
package org.zerock.b01.repository;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.zerock.b01.domain.Board;
import java.util.stream.IntStream;
@SpringBootTest
@Log4j2
public class BoradReposioryTests {
@Autowired
private BoardRepository boardRepository;
//insert
@Test
public void testInsert() {
IntStream.rangeClosed(1,100).forEach(i -> {
Board board = Board.builder()
.title("Title.." + i)
.content("Content.. " + i)
.writer("user" + (i%10))
.build();
Board result = boardRepository.save(board);
log.info("BNO : " + result.getBno());
});
}}
* 다음 글
[SpringBoot] 스프링부트 프로젝트 생성 후 JPA 사용 및 테스트하기2 RUD 테스트~ORM/JPA~
https://rockbottomdevbus.blogspot.com/2024/04/springboot-jpa-2-rud-jpa-325-intellij.html
* 참고
https://thread-beech-c05.notion.site/0426-JPA-13f1aa1adcc242eebe8a42911598a9bc
댓글
댓글 쓰기