728x90
반응형
SMALL

jpa

각각의 테이블 클래스 생성

📌 자바 클래스를 JPA를 사용해 Meber라는 테이블 만들기

  1. Member 클래스 생성
  2. @Entity 생성
  3. @Getter 생성 //값을 가져올 때 쓰임
  4. @NoArgsConstructor 생성 // 기본생성자 만들어줌
  5. @Id 생성
  6. @GeneratedValue (strategy = GenerationType.IDENTITY) 생성
  7. private Long id;
  8. @Column(nullable = false)
  9. 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> {
}
728x90
반응형
LIST

'개발 > 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

+ Recent posts