IDEA : IntelliJ 2021.1.3
DB : MySQL 8.0.23
JPA(Java Persistence API)
JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 Mapping 해준다
ORM(Object-Relational Mapping)
객체와 관계형 DB를 매핑
Hibernate
ORM 프레임워크
Hibernate 기반으로 만들어진 ORM 기술 표준이 바로 JPA다.
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
spring.jpa.hibernate.ddl-auto=update
@Entity
이 클래스가 DB의 User라는 테이블에 Mapping이 되는 클래스
라는 것을 명시
해당 클래스가 DB의 테이블과 1:1 매핑됨
@Table(name="??")
테이블
을 의미
어노테이션을 생략하면 클래스의 이름을 테이블의 이름으로 자동 인식
@Id
Entity 빈의 Primary Key
를 의미
하나의 Entity에 반드시 하나가 존재해야 한다.
복수키도 설정 가능
@GeneratedValue
데이터베이스에 의해 자동으로 생성된 값
해당 멤버 변수와 테이블의 컬럼 매핑
생략 시 필드의 이름이 테이블의 컬럼으로 자동으로 매핑
name : 속성(String)
맵핑할 테이블의 컬럼 이름을 지정
없다면 멤버변수의 이름 그대로 적용
CamelCase 로 작성된 컬럼 변수가 있다면 UnderScore 형식으로 name 을 명시적으로 작성
nullable : 속성(boolean)
NULL을 허용할지, 허용하지 않을지 결정
length : 속성(int)
컬럼의 길이값
unique : 속성(boolean)
컬럼이 유일한 값을 가지는지
insertable : 속성(boolean)
엔티티 저장시 선언된 필드도 같이 저장
default = true
updatable : 속성(boolean)
엔티티 수정시 이 필드를 함께 수정
defalut = true
java.util.Date와 java.util.Calendar 값 매핑할 때 사용
=> 이 상태에서 Application을 실행하면, applications.properties의 정보들을 활용하여 dataSource라는 타입의 Bean을 만들고 hibernate 자동설정이 동작한다.
즉, JPA를 사용하는데 필요한 Bean들이 모두 자동으로 동작한다.
UserConference
, User
두 개의 Entity가 다음과 같이 1:N 관계로 매칭되어 있고
UserConference
는 User
Entity의 id
컬럼을 Reference 할 때,
JPA Entity 안에서 @Annotation
으로 외래키 관계를 구현한다.
@Entity
@Getter
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String position;
private String department;
......
}
@Entity
@Getter
@Setter
public class UserConference {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name="Conference_ID", referencedColumnName = "ID")
private Conference conferenceId;
@ManyToOne
@JoinColumn(name="User_ID", referencedColumnName = "ID")
private User userId;
https://cjw-awdsd.tistory.com/47
[스프링부트 (7)] Spring Boot JPA(1) - 시작 및 기본 설정
https://goddaehee.tistory.com/209
https://steemit.com/kr-dev/@igna84/spring-boot-jpa-hibernate-2
Spring 관련 Annotation
https://velog.io/@geunwoobaek/Spring-JPA-%EA%B4%80%EB%A0%A8-%EC%A3%BC%EC%9A%94-Annotation%EC%A0%95%EB%A6%AC
[JPA] JPA란 무엇인가?
https://velog.io/@jwkim/JPA-JPA%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80