Spring_boot/Project

[Spring] 엔티티 클래스 설계하기(feat. SQL)

달의요정루나 2021. 7. 29. 20:00

1. 우선 Spring Starter Project로 boot02-1이라는 프로젝트를 만듭니다.

 

2. 프로젝트를 생성할때 라이브러리 모듈은 Lombok, Spring Data JPA, MySQL Driver, Spring Web을 선택합니다.

(참고로 스프링 부트는 2.5.3을 기준으로 했습니다.)

 

https://julian5383.tistory.com/35

 

[Spring] Spring Tool Suite 4와 MySQL Workbench 8.0 연결방법

현재 Spring 공부를 들어가서 Spring와 MySQL을 연결하는 방법을 알려드리려고 합니다. 1. 먼저 메뉴 창에서 Help -> Install New Software를 들어갑니다. 2. Work with 목록에서 "Latest Eclipse Release - htt..

julian5383.tistory.com

3. MySQL을 설정합니다. 프로젝트를 위한 데이터베이스 스키마 jpa_ex를 만듭니다.(만드는 방법은 위의 게시물 참조)

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

spring.datasource.url = jdbc:mysql://localhost/jpa_ex?characterEncoding=utf8&serverTimezone=Asia/Seoul

spring.datasource.username = root

spring.datasource.password = //이곳에는 이용할 MySQL의 localhost 비밀번호를 입력합니다. 

 

 

spring.jpa.hibernate.ddl-auto=create

spring.jpa.generate-ddl=false

spring.jpa.show-sql=true

spring.jpa.database=mysql

logging.level.org.hibernate=info

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

4. src/main/resources에서 application.properties에서 데이터베이스 연결에 필요한 JDBC 연결 정보들을 입력합니다.

 

그리고 url 부분에서 jpa_ex는 이용할 데이터베이스 스키마의 이름을 입력하셔야 합니다.

package org.zerock.domain;

import java.sql.Timestamp;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@Entity //해당 클래스가 엔티티 클래스임을 명시해줌
@Table(name="tbl_boards") // 데이터베이스에 클래스명과 동일한 이름으로 작성되어야 함
public class Board {

	@Id // 해당 컬럼이 식별키(Primary Key)라는 것을 의미
	@GeneratedValue(strategy = GenerationType.IDENTITY)
    // @ID와 함께 이용해서 식별키를 어떤 전략으로 이용할지 알려줌.
    // 여기서는 기본키 생성 방식 자체를 데이터베이스에 위임하는 방식
    //데이터베이스에 의존적인 방식
	private Long bno;
	private String title;
	private String writer;
	private String content;
	
	@CreationTimestamp
	private Timestamp regdate;
	@UpdateTimestamp
	private Timestamp updatedate;
    // Timestamp들은 엔티티가 생성되거나 업데이트되는 시점의 날짜 데이터를 기록하는 설정이다.
}

5. org.zerock.domain 패키지에 Board 클래스를 작성하고, 인스턴스 변수들과 Lombok으로 생성할 코드들을 지정한다.

package org.zerock.persistence;

import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.domain.Board;

public interface BoardRepository extends JpaRepository<Board, Long>{

}

6. org.zerock.persistence 패키지를 추가하고, BoardRepository라는 인터페이스를 추가한다. 부모 인터페이스는 JpaRepository로 설정한다.

인터페이스를 통해서 동적으로 실행할 수 있는 클래스를 동적으로 생성한다.

 

package org.zerock.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.zerock.domain.Board;
import org.zerock.persistence.BoardRepository;

@RestController
public class BoardController {

	@Autowired
	private BoardRepository boardRepo;
    // 자동으로 BoardRepository인터페이스와 연결된다.
	
	@GetMapping("/insert")
	public void insert() {
		
		Board board = new Board();
		board.setTitle("게시글 제목");
		board.setContent("게시글 내용 넣기");
		board.setWriter("user01");
        //board에 들어갈 제목, 내용, 작성자이름이다.
        
		boardRepo.save(board);
        //board에 저장된다.
	}
}

7. jpa_ex 스키마에 들어갈 내용들을 입력받는 클래스를 만들어준다.

8. Boot02-1을 Spring Boot App으로 시작한다.

9. 크롬에서 localhost:8080/insert로 실행을 한다. 실행 후 콘솔 창에 Hibernate: insert into tbl_boards (content, regdate, title, updatedate, writer) values(?,?,?,?,?)가 뜨면 성공한 것이다.

10. Database Development로 이동한 후 출력된 값을 확인한다.