✍️
이런 걸
배워요!
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
}

















댓글 ( 4)
댓글 남기기