스프링

 

✍️
이런 걸
배워요!

JPA의 기본기를 탄탄하게 다질 수 있습니다.

JPA의 내부 동작 방식을 이해할 수 있습니다.

객체와 DB 테이블을 올바르게 설계하고 매핑할 수 있습니다.

실무에서 자신있게 JPA를 사용할 수 있습니다.

 

 

인프런 강의 :  https://www.inflearn.com/course/ORM-JPA-Basic

 

강의 자료 : 

https://github.com/braverokmc79/jpa-basic-lecture-file

 

 

소스 :https://github.com/braverokmc79/ex1-hello-jpa-common

https://github.com/braverokmc79/ex1-hello-jpa

 

 

 

 

 

 

 

 

 

 

 

[3] 엔티티 매핑

 

 

8.  객체와 테이블 매핑

 

강의 :

 

https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21691&tab=curriculum

 

 

목차
• 객체와 테이블 매핑

• 데이터베이스 스키마 자동 생성

• 필드와 컬럼 매핑

• 기본 키 매핑

• 실전 예제 - 1. 요구사항 분석과 기본 매핑

 

 

엔티티 매핑 소개

• 객체와 테이블 매핑: @Entity, @Table

• 필드와 컬럼 매핑: @Column

• 기본 키 매핑: @Id

• 연관관계 매핑: @ManyToOne,@JoinColumn 

 


@Entity

• @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.

• JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수

• 주의

• 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)

• final 클래스, enum, interface, inner 클래스 사용X

• 저장할 필드에 final 사용 X

 

 

 

 

 

 

 

 

 

 

 

 

9.  데이터베이스 스키마 자동 생성

 

강의 :

 

https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21692&tab=curriculum

 

 

데이터베이스 스키마 자동 생성

 

• DDL을 애플리케이션 실행 시점에 자동 생성
• 테이블 중심 -> 객체 중심


• 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한
DDL 생성


• 이렇게 생성된 DDL은 개발 장비에서만 사용
• 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬
은 후 사용

 

 

<property name="hibernate.hbm2ddl.auto" value="create" />

 

 

 

 

 

 

package hellojap;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
//@Table(name="USER")
public class Member {
	
	@Id
	private Long id;
	
	@Column(unique = true , length=10)
	private String name;
	
	public Member() {
		
	}
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
	
}

 

 

 

 

 

 

 

 

10.  필드와 컬럼매핑

 

강의 :

 

https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21693&tab=curriculum

 

 

 

 

RoleType

package hellojap;

public enum RoleType {
	USER, ADMIN
}

 

 

 

Member

package hellojap;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

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

@Entity
public class Member {
	
	@Id
	private Long id;
	
	@Column(name="name" , nullable = false, columnDefinition = "varchar(100) default  'EMPT' ")
	private String username;
	
	private Integer age;
	
	//기본값은  ORDINAL 이다 숫자로 등록처리된다.
	//EnumType은 무조건 String 타입으로 사용해야 한다.
	@Enumerated(EnumType.STRING)
	private RoleType roleType;
	
	
	//타임스탬프 과거 버전
	@Temporal(TemporalType.TIMESTAMP)
	private Date createDate;
	
	
	//타임스탬프 과거 버전
	@Temporal(TemporalType.TIMESTAMP)
	private Date lastModifiedDate;
	
	
	@CreationTimestamp
	private LocalDate localDate;
	
	@UpdateTimestamp
	private LocalDateTime localDateTime;
	
	
	
	//문자타입인경우 기본 clob
	@Lob
	private String description;
	
	
	@Transient
	private int temp;
	
	
	public Member() {
		
	}

	
	
}

 

 

 

 

 

 

 

 

 

11.  기본키 매핑

 

강의 :

 

https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21694&tab=curriculum

 

 

 

 

Member

package hellojap;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

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

@Entity
@SequenceGenerator(name="member_seq_generator", sequenceName = "member_seq")
public class Member {
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq_generator")
	private Long id;
	
	@Column(name="name" , nullable = false, columnDefinition = "varchar(100) default  'EMPT' ")
	private String username;
	
	private Integer age;
	
	
	//기본값은  ORDINAL 이다 숫자로 등록처리된다.
	//EnumType은 무조건 String 타입으로 사용해야 한다.
	@Enumerated(EnumType.STRING)
	private RoleType roleType;
	
	
	//타임스탬프 과거 버전
	@Temporal(TemporalType.TIMESTAMP)
	private Date createDate;
	
	
	//타임스탬프 과거 버전
	@Temporal(TemporalType.TIMESTAMP)
	private Date lastModifiedDate;
	
	
	@CreationTimestamp
	private LocalDate localDate;
	
	@UpdateTimestamp
	private LocalDateTime localDateTime;
	
	
	
	//문자타입인경우 기본 clob
	@Lob
	private String description;
	
	
	@Transient
	private int temp;
	
	
	public Member() {
		
	}

	
	
}

 

 

 

 

 

 

 

 

12. 실전 예제 1 - 요구사항 분석과 기본 매핑

 

강의 :

 

https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21695&tab=curriculum

 

 

 

소스 :

 

https://github.dev/braverokmc79/jpa-basic-shop

 

Member

 

package jpashop.home.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
public class Member {

	@Id @GeneratedValue
	@Column(name="MEMBER_ID")
	private Long id;
	private String name;
	private String city;
	private String street;
	private String zipcode;
	
}

 

 

Item

package jpashop.home.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
public class Item {

	@Id @GeneratedValue
	@Column(name="ITEM_ID")
	private Long id;
	
	private String name;
	private String price;
	private int stockQuantity;
}

 

Order

package jpashop.home.domain;

import java.time.LocalDateTime;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
@Table(name="ORDERS")  //ORDER DB 에서 예약어로 사용되는 경우 많아서 ORDERS 
public class Order {
  
	@Id @GeneratedValue
	@Column(name="ORDER_ID")
	private Long id;
	
	private Long memberId;
	
	private LocalDateTime orderDate;
	
	
	//ORDINAL 숫자 타입으로 하면 순서가 꼬이므로 무저건 String 한다
	@Enumerated(EnumType.STRING)
	private OrderStatus status;
	
	
	
}

 

 

OrderItem

package jpashop.home.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
public class OrderItem {

	@Id
	@GeneratedValue
	@Column(name="ORDER_ITEM_ID")
	private Long id;
	
	@Column(name="ORDER_ID")
	private Long orderId;
	
	@Column(name="ITEM_ID")
	private Long itemId;
	
	
	private int oderPrice;
	
	private int count;
	
}

 

OrderStatus

package jpashop.home.domain;

public enum OrderStatus {
	ORDER, CANCEL
}

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

천 길 물 속은 알아도 계집 마음속은 모른다 , 여자의 마음은 변하기 쉬워서 대중 할 수 없다는 말.

댓글 ( 4)

댓글 남기기

작성