1. 프로젝트 생성
* 설정해주었던 dependencies가 build.gradle에 나타나 있는 것을 확인 할 수 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
2. domin
1) Member
- @Getter, @Setter 어노테이션 사용하여 Getter,Setter 만들어 줌 -> 코드의 간결화
- 시퀀스 생성
@SequenceGenerator(name = 객체이름(변수라고 생각하자), sequenceName = DB에 만들어지는 이름,
initialValue = 시작번호, allocationSize = 증가값)
- @Column(name = 컬럼명, length = 길이)
- @Transient 메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용, 데이터 베이스 저장 X
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@SequenceGenerator(name ="member_seq_gen", //객체이름
sequenceName = "member_seq_generator", //맵핑할 DB 시퀀스 이름
initialValue = 1, //시작번호
allocationSize = 1 //증가수
)
@Table(name="member1") //디폴트는 클래스명. 테이블 이름 별도로 지정
public class Member {
@Id
@GeneratedValue(
strategy = GenerationType.SEQUENCE, //전략
generator = "member_seq_gen"
)
@Column(name = "member_id")
private Long id;
@Column(name = "user_name", length = 50) //컬럼 이름/사이즈
private String name;
@ManyToOne //FK 다 대 1 원칙
@JoinColumn(name= "team_id")
private Team team;
@Transient
private Long teamid;
@Transient //메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용, 데이터 베이스 저장 X
private String teamname;
}
2) Team
- MemberTable과 연결(FK)
@ManyToOne
@JoinColumn(name= "team_id")
private Team team;
package com.oracle.oBootJpa02.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@SequenceGenerator( name="team_seq_gen",
sequenceName = "team_seq_generator",
initialValue = 1,
allocationSize = 1
)
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "team_seq_gen")
private Long team_id;
@Column(name = "teamname")
private String name;
}
3. repository
@Override
public Member save(Member member) {
//팀 저장
Team team = new Team();
team.setName(member.getTeamname());
System.out.println("team persist 전");
em.persist(team);
System.out.println("team persist 후");
//회원 저장
member.setTeam(team); //단방향 연관 관계 설정
System.out.println("member persist 전");
em.persist(member);
System.out.println("member persist 후");
return member;
}
1. team persist -> 영속성 컨텍스트에 저장 되어 있음. 값을 가져오기위해 team_seq는 실행됨. DB저장 x
2. member persist -> 영속성 컨텍스트에 저장 되어 있음. 값을 가져오기위해 member_seq는 실행됨. DB저장 x
3. service 단에서 트랜잭션 실시. insert 문 실행.
'IT > SpringDay' 카테고리의 다른 글
06.JpaApi① (0) | 2022.05.22 |
---|---|
05.JPA02② (0) | 2022.05.19 |
Lombok설치 (0) | 2022.05.19 |
05.JPA③-Member List 조회 (0) | 2022.05.19 |
05.JPA②-Member 신규 생성 (0) | 2022.05.19 |