월루를 꿈꾸는 대학생
[Spring Boot] 데이터 베이스 세팅 JPA 본문
728x90
서버에서 데이터 처리할 때 sql문 사용을 하는데
이걸 코드 안에서 쿼리문 봐아악 작성하면 머 긴 경우는 한 페이지 정도로 길어진다고 함 ...
그런 코드는 보기도 싫을 뿐더로 봐도 이해하기 힘들다
ORM을 사용하면 자바 코드 만으로도 CRUD가 가능하다고 함
즉 sql 문법 필요없이 코드로 DB를 관리할 수가 있음 !
엔티티
- 데이터 관리용 ORM클래스
JPA
- 자바 쪽에서 사용하는 ORM 기술 표준
H2
- 간편하게 사용할 경량 DB
그래들에 파일 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
/resource/application.properties
- db 사용하기 위한 설정 파일
# DATABASE
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:~/local
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=user
spring.datasource.password=
홈디렉토리에다가 local.mv.db 파일 만들기
h2-console 경로에 들어간 후 로그인 하기
경로는 test를 local 로 바꿔야함
gradle 파일에 jpa 위한 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
마찬가지로 applpication.properties 에 코드 추가
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
엔티티
- 테이블과 매핑되는 자바클래스 !
- 보통 엔티티 생성할 때는 setter를 안씀 -> 데이터 변경이 용이할수록 안전 x
- 생성할 때는 lombok의 @builder 데이터변경에는 엔티티에 메서드 추가해서 쓴다고 함
package com.example.sbb;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.List;
@Getter
@Setter
// Controller 처럼 Entity 적용시켜야 이게 엔티티인지 앎
@Entity
public class Question {
//기본키 지정
@Id
//따로 저장 안해도 디비가 자동으로 세팅해줌
// strategy = 고유 번호 생성
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
//엔티티 속성 = 컬럼명
// @Column 없어도 인식은 함 다만 세부설정하기 위함
@Column(length = 200)
private String subject;
// 글자수 제한 없는 경우
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
// 실제 디비에선 카멜케이스가 아니라 스네이크 형식으로 컬럼들이 만들어짐
//질문과 답변은 1:n
//question 하나에 answer 여러개니까 List구성
//질문 삭제시 답변도 다 같이 삭제 cascade remove
@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
private List<Answer> answerList;
}
package com.example.sbb;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
// 질문 엔티티와 연결된 속성이라는 걸 표시해야함
// 하나의 질문에 답변 여러개 달림 - 외래키 형성됨
@ManyToOne
private Question question;
}
생성확인
출처
728x90
'Programing > Spring Boot' 카테고리의 다른 글
[GIT] .gitignore 관리 (0) | 2022.12.23 |
---|---|
[Spring Boot] Rest API & MySQL & MyBatis 연동 (0) | 2022.12.23 |
[Spring Boot] 간단한 RestApi 만들기 (0) | 2022.12.23 |
[Spring Boot] 리포지토리 (0) | 2022.12.23 |
[Spring Boot] 기본 세팅 및 기초 정리 (0) | 2022.12.15 |