Spring (58) 썸네일형 리스트형 다양한 find 지원. Repository가 기본적으로 제공하는 것은 id로 찾는 방식인데 email, account등 다양한 정보로 찾기 위해서는 UserRepository 내부에 Optional findByAccount(String account); 등의 설정해 주면됨. 이렇게 하면 Test하는 쪽에서는 Repository를 사용하여 findByAccount를 사용 할 때, 반드시 Optional 로 받아야 함. 만약 UserRepository 내부에 User findByAccount(String account); 로 적어 주었다면 Test하는 쪽에서는 User로 받아야 함. Optional은 ifPresent()같은 메소드를 지원하므로 편한 감이 있음. JPA는 User 클래스 안에 지정된 변수에 대해서만 findBy제공.. @OneToMany (fetch type) , @ManyToOne OrderDetail 입장에서 자신은 N이고 User는 1. @ManyToOne 연관 관계 설정시에는 객체로 표시해야 함. 자신이 1 상대가 Many인 경우 @OneToMany이고 List로 받아올 수 있음. @OneToMany(fetch = FetchType.LAZY , mappedBy = "user") 어떤 칼럼으로 매핑할 것 인지 정할 때는 Many입장의 객체에서 자신을 1로 두고 매핑한 그 객체의 이름과 같게 해야 함. @Data @AllArgsConstructor @NoArgsConstructor @Entity @ToString(exclude = {"user","item"}) //lombok사용시 toString을 자동지정 해 주는데 //현재 OrderDetatil과 User,Item이 서로 상.. ERD user와 item의 관계를 생각해 보면 한명의 user는 여러개의 item을 가질 수 있고 하나의 item은 여러명의 user에게 선택 될 수 있다. 따라서 중간에 주문내역이라는 테이블을 통해 user-1: N - 주문 내역 - N : 1- item 이런 식으로 연결 시켜 줌. Mysql ERD 그리기 원하는 DB에서 테이블 만든 후에 database -> reverse engineer에서 관계 설정 해줌. 점선 -> 한쪽만 기본키로 가지는 경우 실선 -> 양쪽 다 기본키로 가지는 경우 그리고 forward engineer에서 완료 시켜주면 관계가 지정 되어 테이블 attribute가 새로 생기거나 하는 변화가 생김. @Autowired , Bean @Autowired 일반적으로 private UserRepository userRepository = new UserRepository(); 이렇게 직접 객체를 만들어서 사용한 것이 일반적인데 @Autowired 사용 시 스프링이 직접 private UserRepository userRepository 라는 객체를 관리 하겠다는 의미 주입 받는 다는 것은 어떤 객체가 만들어 지고 그 속성은 내부에서 생겨나는 것이 아니라 외부에서 만들어진 것으로 부터 들어와서 입력되는 것 예를 들어 Car라는 객체에 Tire라는 class 변수가 있다고 하면 Tire는 Car class 내부에서 만드는 것이 아니고 Tire tr = new KoreaTire(); Car car = new Car(tr); 이런 식으로 주입되.. Assertions & Transactional 어노테이션 @Transactional 사용하면 roll back해줌 delete해도 수행은 정상적으로 이뤄지지만 마지막에 roll back으로 해당 데이터가 안 지워진채로 다시 남음. 테스트 용도로 적합. Many에 해당하는 Entity를 담은 List를 Stream을 통해 열람 하면서 read하는 테스트 작업 중에 오류가 발생할 수 있음. 이 때 Transactional 붙여 줘야 함. A - B - C 로 구성되 ERD 모델에서 A와 B에 대한 관계를 생각 할 때 A가 가진 B의 List를 뽑아서 그 안에 있는 C의 Id를 구하고자 한다면 이 과정과 동시에 A에 대해 C가 추가 된다면 무결성이 깨짐. 따라서 transactional로 atomic하도록 해줘야 함. Assertions 예시 @Test public.. Main & Test main은 실질적인 코드가 들어가는 부분 test는 main에 코딩한 코드를 테스트함. 실질적으로 운영할 때 크게 영향 안주고 테스트 용으로만 사용 스프링 테스트 클래스 상속받아서 작업 해 주면 됨. Test에서 코드 실행시 @Test 어노테이션 달고 실행 해야 함. public class UserRepositoryTest extends Study5ApplicationTests { ... } JPA url 오류 해결. 문제 1. gradle 추가 compile('mysql:mysql-connector-java') compile('org.springframework.boot:spring-boot-starter-data-jpa') 2. application.properties에서 db와 계정 명시 spring.datasource.url=jdbc:mysql://localhost:3306/study?useSSL=false&Unicode=true&serverTimezone=Asia/Seoul spring.datasource.username=root spring.datasource.password=wns9511 spring.jpa.show-sql=true 3. run()을 하게 되면 url에 관한 에러가 발생. 4. 해결 방법 .. Repository Repository 따로 쿼리문 생성하지 작성하지 않아도 create, read, update, delete같은 기본 쿼리 사용 가능 만드는 법 해당 EntityRepository 생성 @Repository 어노테이션 작성 extends JpaRepository save() -> JPA 메소드로 해당 객체 Repository 생성해서 save안에 객체를 넣어주면 db에 저장됨. 반환은 해당 객체 JpaRepository를 상속받게 되면 CRUD를 지원하는데 그때 사용하는 메소드는 -> create에서 save -> read에서 find find 사용시에 객체로 반환 받기 위해서는 optional 제너릭 타입으로 받아야 함. Optional user = userRepository.findById(2L); .. 이전 1 ··· 3 4 5 6 7 8 다음