728x90
반응형
SMALL
@Transactional
    public Long update(Long id, MemoRequestDto requestDto){
        Memo memo = memoRepository.findByID(id).orElseThrow(
               () -> new IllegalAccessException("아이디가 존재하지 않습니다.")
        );
        memo.update(requestDto);
        return memo.getId();
    }

@Transactional
    public Long update(Long id, MemoRequestDto requestDto) {
        Memo memo = memoRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
        );
        memo.update(requestDto);
        return memo.getId();
    }

IllegalAccessException → IllegalArgumentException 오타!

728x90
반응형
LIST
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
728x90
반응형
SMALL

인텔리제이 프로에는 왼쪽에 spring이 들어있습니다!

클릭 후 자바 17버전으로 클릭해주면~ 로딩로딩로딩~

그후 데이터 베이스 클릭 후

“+” 클릭!

In-memory로 변경 후 URL에 오류가 안나는 주소 입력!

jdbc:h2:mem:test;MODE=MYSQL;

jdbc:h2:mem:test;MODE=MYSQL;OLD_INFORMATION_SCHEMA=TRUE;

화면에서 우클릭 후

Change Dialect 이 있을 경우 SQL 클릭후 입력!

Change Dialect 이 없을 경우 H2로 입력

차이는 밑에 COMMET가 없는정도

MySQL
CREATE TABLE IF NOT EXISTS MAJOR
(	
	major_code varchar(100) primary key comment '주특기코드', 
	major_name varchar(100) not null comment '주특기명',
	tutor_name varchar(100) not null comment '튜터'
)
COMMENT '주특기' charset=utf8;
H2
CREATE TABLE IF NOT EXISTS MAJOR
(	
	major_code varchar(100) primary key comment '주특기코드', 
	major_name varchar(100) not null comment '주특기명',
	tutor_name varchar(100) not null comment '튜터'
)

설정에서 dialectd을 찾아 SQL로 설정을 해보았는데, 빨간 줄이 뜨고 에러가 발생

설정에서 dialectd을 찾아 SQL를 H2로 설정을 해보았는데, 빨간 줄이 뜨긴하는데 입력은 가능!

해결 방안은 H2로 입력해주면 될거 같다.

join을 사용해서 연결하기

*SELECT s*.name, *s*.major_code, *m*.major_name *FROM* STUDENT *s JOIN* MAJOR *m ON s*.major_code = *m*.major_code;

joun을 사용하지 않고 연결하기

*SELECT s*.name, *s*.major_code, *m*.major_name *FROM* STUDENT *s*, MAJOR *m WHERE s*.major_code = *m*.major_code;

728x90
반응형
LIST

'개발 > Spring' 카테고리의 다른 글

spring 서버 연결 메모만들기  (0) 2023.02.04
mvc  (0) 2023.02.04
JPA 연습!  (0) 2023.02.04
SpringBoot 및 서버 이해  (0) 2023.02.03
웹 동작방식 이해하기  (1) 2023.02.03

+ Recent posts