반응형
오늘은 10강 JPA Relation 부터 들어보았다.
*Person.java
package com.fastcampus.javaallinone.project3.mycontact.domain;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import java.time.LocalDate;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@Data
public class Person {
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
@NonNull
private int age;
private String hobby;
@NonNull
private String bloodType;
private String address;
private LocalDate birthday;
private String job;
@ToString.Exclude
private String phoneNumber;
@OneToOne // 1 대 1 relation을 지정함
private Block block;
}
*Block.java
package com.fastcampus.javaallinone.project3.mycontact.domain;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.LocalDate;
@Entity
@Data
@NoArgsConstructor
@RequiredArgsConstructor
public class Block {
@Id
@GeneratedValue
private Long id;
@NonNull
private String name;
private String reason;
private LocalDate startDate;
private LocalDate endDate;
}
*PersonRepositoryTest.java
package com.fastcampus.javaallinone.project3.mycontact.repository;
import com.fastcampus.javaallinone.project3.mycontact.domain.Block;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDate;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
class BlockRepositoryTest {
@Autowired
private BlockRepository blockRepository;
@Test
void crud(){
Block block = new Block();
block.setName("martin");
block.setReason("친하지않아서");
block.setStartDate(LocalDate.now());
block.setEndDate(LocalDate.now());
blockRepository.save(block);
List<Block> blocks = blockRepository.findAll();
assertThat(blocks.size()).isEqualTo(1);
assertThat(blocks.get(0).getName()).isEqualTo("martin");
}
}
*PersonService
package com.fastcampus.javaallinone.project3.mycontact.service;
import com.fastcampus.javaallinone.project3.mycontact.domain.Person;
import com.fastcampus.javaallinone.project3.mycontact.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class PersonService {
@Autowired
private PersonRepository personRepository;
public List<Person> getPeopleExcludeBlocks(){
List<Person> people = personRepository.findAll();
// List<Block> blocks = blockRepository.findAll();
// List<String> blockNames = blocks.stream().map(Block::getName).collect(Collectors.toList());
// //blocks에 들어있는 모든 값을 순회하면서 getName을 순회하면서 getName만 뽑아오도록 함.
return people.stream().filter(person -> person.getBlock() == null).collect(Collectors.toList());
//people 리스트 중에서 block 이 되지 않은 값만 리턴
}
}
*PersonServiceTest
package com.fastcampus.javaallinone.project3.mycontact.service;
import com.fastcampus.javaallinone.project3.mycontact.domain.Block;
import com.fastcampus.javaallinone.project3.mycontact.domain.Person;
import com.fastcampus.javaallinone.project3.mycontact.repository.BlockRepository;
import com.fastcampus.javaallinone.project3.mycontact.repository.PersonRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class personServiceTest {
@Autowired
private PersonService personService;
@Autowired
private PersonRepository personRepository;
@Autowired
private BlockRepository blockRepository;
@Test
void getPeopleExcludeBlocks(){
givenPeople();
givenBlocks();
List<Person> result = personService.getPeopleExcludeBlocks();
//System.out.println(result);
result.forEach(System.out::println);
// for each - 스트림 이용하는 방식: result 의 각 개체가 한줄씩 출력됨
}
private void givenPeople() {
givenPerson("martin", 10, "A");
givenPerson("david", 9, "B");
givenBlockPerson("dennis",7,"O");
givenBlockPerson("martin",11,"AB");
}
private void givenBlocks() {
givenBlock("martin");
}
private void givenBlockPerson(String name, int age, String bloodType){
Person blockPerson = new Person(name, age, bloodType);
blockPerson.setBlock(givenBlock(name));
personRepository.save(blockPerson);
}
private void givenPerson(String name, int age, String bloodType) {
personRepository.save(new Person(name, age, bloodType));
}
private Block givenBlock(String name) {
return blockRepository.save(new Block(name));
}
}
*PersonRepositoryTest
package com.fastcampus.javaallinone.project3.mycontact.repository;
import com.fastcampus.javaallinone.project3.mycontact.domain.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
class PersonRepositoryTest {
@Autowired
private PersonRepository personRepository;
@Test
void crud(){
Person person = new Person();
person.setName("martin");
person.setAge(10);
person.setBloodType("A");
personRepository.save(person);
System.out.println(personRepository.findAll());
List<Person> people = personRepository.findAll();
assertThat(people.size()).isEqualTo(1);
assertThat(people.get(0).getName()).isEqualTo("martin");
assertThat(people.get(0).getAge()).isEqualTo(10);
assertThat(people.get(0).getBloodType()).isEqualTo("A");
}
@Test
void hashCodeAndEquals(){
Person person1 = new Person("martin", 10, "A");
Person person2 = new Person("martin", 10, "A");
System.out.println(person1.equals(person2));
System.out.println(person1.hashCode());
System.out.println(person2.hashCode());
Map<Person, Integer> map = new HashMap<>();
map.put(person1, person1.getAge());
System.out.println(map);
System.out.println(map.get(person2));
}
}
패스트캠퍼스 강의: https://bit.ly/3ilMbIO
Java 웹 개발 마스터 올인원 패키지 Online. | 패스트캠퍼스
자바 기초문법부터 프로젝트 실습까지 Java 문법부터 스프링/스프링부트, 트렌디한 기술인 JPA까지 모두 배우는 온라인 강의입니다.
www.fastcampus.co.kr
반응형
'언어공부 > JAVA&SPRING' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 31회차 미션 (0) | 2020.09.09 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 30회차 미션 (0) | 2020.09.08 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 28회차 미션 (0) | 2020.09.06 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 27회차 미션 (0) | 2020.09.05 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 26회차 미션 (0) | 2020.09.04 |
댓글