학습목표
1. JPA어노테이션 이해
2. JPA로 Entity 생성
3. 간단한 crud 조작 실습
<전제조건>
Mysql workbench에서 다음과 같은 user 테이블을 생성한 상태를 가정.

1. User Class 만들기
package com.group.libraryapp.domain.user;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //AutoIncrement 붙혔기 때문에.
private Long id = null; // id를 mysql에서 bigint로 만들었기때문에 이와 대응되는 Long으로 만들어야 한다.
private String name;
private Integer age;
//기본생성자가 꼭 필요하다.
protected User() {}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public User(String name, Integer age) {
if (name == null || name.isBlank()) { // String.format은 예외의 메시지처리 의미.
throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다", name));
}
this.name = name;
this.age = age;
}
}
<설명>
1. @Entity : 스프링이 User객체와 user테이블을 같은 것으로 바라본다.
※ 그래서 Entity가 뭔데? : 저장되고 관리되어야 하는 데이터
2. @Id : 이 필드를 PK(Primary Key)로 간주한다.
3. id는 테이블 생성 ddb문 ( 상단의 이미지 )를 보면 BIGINT로 생성했다. 이는 JAVA의 Long과 대응되기에 변수타입을 Long으로 설정해준다.
4. id는 pk로써 AutoIncrement라는 부가조건을 붙혔기 때문에, 다음과 같은 어노테이션을 추가해준다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue : Primary Key는 자동생성되는 값이라는 것을 보여주는 identity다.
5. 기본생성자가 꼭 필요하다!
//기본생성자가 꼭 필요하다.
protected User() {}
6. @Column : 객체의 필드와 TABLE의 필드를 매핑한다!
→ null이 들어갈 수 있는지 여부, 길이 제한, DB에서의 column 이름 등등 을 작성한다.
※ 다만 TABLE의 필드와 완전히 일치한다면 @Column 어노테이션을 과감히 생략해도 된다.
추가하거나 반드시 언급해야할 내용이 있을때만 사용하도록 하자.
잘 보면 age같은 경우에는 추가 조건도 없고 table과 일치하기 때문에 @Column어노테이션을 생략한 것을 확인할 수 있다.
@Column(nullable = false, length = 20) //name varchar(20)
private String name;
private Integer age;
2. application.yml 혹은 application.properties에 JPA에 필요한 내용을 담는다.
<application.yml>
spring:
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
show_sql: true
format_sql: true
dialect: org.hibernate.dialect.MySQL8Dialect
<설명>
1. ddl-auto : 처음에 스프링을 실행할 때, 기존 테이블들과 ddl문이 다르면 어떻게 할까에 대한 설정장치 - none으로 설정하여 아무 조치도 취하지 않도록 설정.
ddl-auto의 조작사항 명세는 다음과 같다.

2. show_sql : jpa를 통해 SQL 을 날릴때, 콘솔창에 SQL 을 보여줄 것인가?
3. format_sql : jpa를 통해 SQL을 보여줄 때, 보기좋게 포메팅 해줄 것인가?
4. dialect : 이 옵션으로 DB를 특정하면 DB별로 조금씩 다른 SQL을 수정해준다.
'DB > JPA' 카테고리의 다른 글
[JPA] Proxy(프록시) (0) | 2024.01.16 |
---|