jpa
각각의 테이블 클래스 생성
📌 자바 클래스를 JPA를 사용해 Meber라는 테이블 만들기
- Member 클래스 생성
- @Entity 생성
- @Getter 생성 //값을 가져올 때 쓰임
- @NoArgsConstructor 생성 // 기본생성자 만들어줌
- @Id 생성
- @GeneratedValue (strategy = GenerationType.IDENTITY) 생성
- private Long id;
- @Column(nullable = false)
- private String memberName;
해주면 한 열의 데이터 테이블을 완성! 기런식으로 쭉 만들면 데이터 테이블을 만들 수 있다!
package com.example.springjpa.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter // 값을 가져올 때 쓰임
@NoArgsConstructor // 기본생성자 만들어줌
@Entity
public class Member { //자바 클래스를 JPA를 사용해 Member라는 테이블을 만들기
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String memberName;
}
각 테이블을 연결해주는 JpaRepository를 각 클래스와 설정값 (현재는 Long과 연결!)
을 상속해주는 interface 만들기
public interface MemberRepository extends JpaRepository<Member, Long> {
}
특정 이름 찾을 때 만드는 방법
기존 MemberRepository에 추가
Optional<Member> findByMemberName(String memberName);
본체인 클래스에 추가!
Member member = memberRepository.findByMemberName("삼식이").orElseThrow(
() -> new RuntimeException("삼식이 없음")
);
System.out.println("member.getMemberName() = " + member.getMemberName());
최종 완성!!
package com.example.springjpa.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor // 기본생성자를 만들어줌
@Getter // 값을 저장할 때 쓰임
@Entity
public class Member { //자바 클래스를 JPA를 사용해 Member라는 테이블을 만들기
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long member;
@Column(nullable = false)
private String memberName;
@OneToMany(mappedBy = "member", fetch = FetchType.EAGER) // 연관관계의 주인이 누구인지 중점적으로 생각하면 쉽게 만들 수 있다!
public List<Orders> orders = new ArrayList<>();
private String id;
public Member(String memberName) { // 단축키 alt + insert
this.memberName = memberName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
package com.example.springjpa.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor // 기본 생성자를 저장
@Getter // 값을 저장할 때 쓰임
@Entity
public class Food { //자바 클래스를 JPA를 사용해 Food라는 테이블을 만들기
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
// 음식의 이름 테이블 생성
@Column (nullable = false)
private String foodName;
// 음식의 가격 테이블 생성
@Column (nullable = false)
private int price;
@OneToMany(mappedBy = "food", fetch = FetchType.EAGER) //OneToMany Food하나에 Order가 여러개가 될수 있기 때문에 사용함 //mappedBy 연관관계의 주인을 지정해 주는것
private List<Orders> orders = new ArrayList<>();
// 현재 Food 테이블과 orders테이블을 JoinColumn을 사용해서 Join이 되어 있는데 food_id의 주인이 Food라고 알려주는 것!
public Food(String foodName, int price) { // 단축키 alt + insert!
this.foodName = foodName;
this.price = price;
}
}
package com.example.springjpa.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor // 기본 생성자 만들어줌
@Getter // 값을 저장할때
@Entity
public class Orders { //자바 클래스를 JPA를 사용해 Order라는 테이블을 만들기
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 넣으면 클래스 Order의 빨간 줄 사라짐!
// Food의 Id와 Member의 Id를 받아와야하기 때문에 ManyToOne 사용!
// JoinColum(name = "Food_id") 사용해서 Food의 Id로 Join 하기
@ManyToOne
@JoinColumn(name = "food_id")
private Food food; // Food 가져오기
@ManyToOne
@JoinColumn(name = "member_id")
private Member member;
// 현재 Food 테이블과 orders테이블을 JoinColumn을 사용해서 Join이 되어 있는데 food_id의 주인이 Food라고 알려주는 것!
// 단축키 alt + insert!
public Orders(Food food, Member member) {
this.food = food;
this.member = member;
}
}
package com.example.springjpa;
import com.example.springjpa.entity.Food;
import com.example.springjpa.entity.Member;
import com.example.springjpa.entity.Orders;
import com.example.springjpa.repository.FoodRepository;
import com.example.springjpa.repository.MemberRepository;
import com.example.springjpa.repository.OrdersRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Component
@RequiredArgsConstructor
public class Restaurant implements ApplicationRunner {
private final FoodRepository foodRepository;
private final OrdersRepository ordersRepository;
private final MemberRepository memberRepository;
@Override
public void run(ApplicationArguments args) throws Exception {
List<Food> foods = new ArrayList<>();
Food food1 = new Food("후라이드", 10000);
foods.add(food1);
Food food2 = new Food("양념치킨", 12000);
foods.add(food2);
Food food3 = new Food("반반치킨", 13000);
foods.add(food3);
Food food4 = new Food("고구마피자", 9000);
foods.add(food4);
Food food5 = new Food("아보카도피자", 110000);
foods.add(food5);
foodRepository.saveAll(foods);
List<Member> members = new ArrayList<>();
Member member1 = new Member("삼식이");
members.add(member1);
Member member2 = new Member("먹깨비");
members.add(member2);
memberRepository.saveAll(members);
System.out.println("==================================================================");
System.out.println("Member 데이터");
List<Member> findMembers = memberRepository.findAll();
for (Member findMember : findMembers) {
System.out.println("findMember = " + findMember.getMemberName());
}
System.out.println("==================================================================");
System.out.println("Food 데이터");
List<Food> findFoods = foodRepository.findAll();
for (Food findFood : findFoods) {
System.out.println("findFood = " + findFood.getFoodName());
}
List<Orders> ordersList = new ArrayList<>();
Orders orders1 = new Orders(findFoods.get(0), findMembers.get(0));
ordersList.add(orders1);
Orders orders2 = new Orders(findFoods.get(3), findMembers.get(1));
ordersList.add(orders2);
Orders orders3 = new Orders(findFoods.get(4), findMembers.get(1));
ordersList.add(orders3);
Orders orders4 = new Orders(findFoods.get(2), findMembers.get(0));
ordersList.add(orders4);
Orders orders5 = new Orders(findFoods.get(2), findMembers.get(0));
ordersList.add(orders5);
Orders orders6 = new Orders(findFoods.get(1), findMembers.get(1));
ordersList.add(orders6);
Orders orders7 = new Orders(findFoods.get(1), findMembers.get(0));
ordersList.add(orders7);
Orders orders8 = new Orders(findFoods.get(3), findMembers.get(1));
ordersList.add(orders8);
ordersRepository.saveAll(ordersList);
System.out.println("==================================================================");
int num = 1;
System.out.println("Orders 데이터");
List<Orders> orderList = ordersRepository.findAll();
for (Orders orders : orderList) {
System.out.println(num);
System.out.println("주문한 사람 = " + orders.getMember().getMemberName());
System.out.println("주문한 음식 = " + orders.getFood().getFoodName());
num++;
}
System.out.println("==================================================================");
System.out.println("삼식이 주문한 음식");
Member samsik = memberRepository.findById(1L).orElseThrow(
()->new RuntimeException("없음")
);
num = 1;
for (Orders orders : samsik.getOrders()) {
System.out.println(num);
System.out.println("주문한 음식 = " + orders.getFood().getFoodName());
System.out.println("주문한 음식 가격 = " + orders.getFood().getPrice());
num++;
}
System.out.println("==================================================================");
System.out.println("아보카도피자 주문한 사람");
Food abocado = foodRepository.findById(5L).orElseThrow(
()->new RuntimeException("없음")
);
for (Orders order : abocado.getOrders()) {
System.out.println("주문한 사람 = " + order.getMember().getMemberName());
}
// 특정 이름 찾을 때 만드는 방법
Member member = memberRepository.findByMemberName("삼식이").orElseThrow(
() -> new RuntimeException("삼식이 없음")
);
System.out.println("member.getMemberName() = " + member.getMemberName());
System.out.println("member.getId() = " + member.getId());
}
}
package com.example.springjpa.repository;
import com.example.springjpa.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByMemberName(String memberName);
}
package com.example.springjpa.repository;
import com.example.springjpa.entity.Food;
import org.springframework.data.jpa.repository.JpaRepository;
public interface FoodRepository extends JpaRepository<Food, Long> {
}
package com.example.springjpa.repository;
import com.example.springjpa.entity.Orders;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OrdersRepository extends JpaRepository<Orders, Long> {
}
'개발 > Spring' 카테고리의 다른 글
spring 서버 연결 메모만들기 (0) | 2023.02.04 |
---|---|
mvc (0) | 2023.02.04 |
SQL 설정 및 연습! (0) | 2023.02.03 |
SpringBoot 및 서버 이해 (0) | 2023.02.03 |
웹 동작방식 이해하기 (1) | 2023.02.03 |