반응형
오늘은 13~14강을 수강했다.
13강에서는 QueryMethod 에 대해서 공부해보았다.
아래와 같은 Method들이 있다.
14강에서는 아래와 같은 어노테이션을 활용하였다.
*Birthday.java
package com.fastcampus.javaallinone.project3.mycontact.domain.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Embeddable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.time.LocalDate;
// Entitiy 에 속해있는 DTO라는 것을 표시
@Embeddable
@Data
@NoArgsConstructor
public class Birthday {
private int yearOfBirthday;
@Min(1)
@Max(12)
private int monthOfBirthday;
@Min(1)
@Max(31)
private int dayOfBirthday;
public Birthday(LocalDate birthday) {
this.yearOfBirthday = birthday.getYear();
this.monthOfBirthday = birthday.getMonthValue();
this.dayOfBirthday = birthday.getDayOfMonth();
}
}
*Person.java
package com.fastcampus.javaallinone.project3.mycontact.domain.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Embeddable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.time.LocalDate;
// Entitiy 에 속해있는 DTO라는 것을 표시
@Embeddable
@Data
@NoArgsConstructor
public class Birthday {
private int yearOfBirthday;
@Min(1)
@Max(12)
private int monthOfBirthday;
@Min(1)
@Max(31)
private int dayOfBirthday;
public Birthday(LocalDate birthday) {
this.yearOfBirthday = birthday.getYear();
this.monthOfBirthday = birthday.getMonthValue();
this.dayOfBirthday = birthday.getDayOfMonth();
}
}
*PersonRepository.java
package com.fastcampus.javaallinone.project3.mycontact.repository;
import com.fastcampus.javaallinone.project3.mycontact.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface PersonRepository extends JpaRepository<Person, Long> {
List<Person> findByName(String name);
List<Person> findByBlockIsNull();
List<Person> findByBloodType(String bloodType);
// Entity 기반으로 쿼리를 실행시키는 것
@Query(value = "select person from Person person where person.birthday.monthOfBirthday = :monthOfBirthday ")
List<Person> findByMonthOfBirthday(@Param("monthOfBirthday") int monthOfBirthday);
}
*PersonService.java
package com.fastcampus.javaallinone.project3.mycontact.service;
import com.fastcampus.javaallinone.project3.mycontact.domain.Person;
import com.fastcampus.javaallinone.project3.mycontact.repository.PersonRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
@Service
@Slf4j
public class PersonService {
@Autowired
private PersonRepository personRepository;
public List<Person> getPeopleExcludeBlocks(){
// List<Person> people = personRepository.findAll();
// return people.stream().filter(person -> person.getBlock() == null).collect(Collectors.toList());
//people 리스트 중에서 block 이 되지 않은 값만 리턴
return personRepository.findByBlockIsNull();
}
public List<Person> getPeopleByName(String name){
// List<Person> people = personRepository.findAll();
//
// return people.stream().filter(person -> person.getName().equals(name)).collect(Collectors.toList());
return personRepository.findByName(name);
}
@Transactional
public Person getPerson(Long id){
Person person = personRepository.findById(id).get();
// System.out.println("person : " + person);
log.info("person ; {}", person); //log출력을 제한할 수 있는 장점이 있어서 print보다 많이 쓴다.
return person;
}
}
*personServiceTest.java
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.time.LocalDate;
import java.util.List;
@SpringBootTest
class personServiceTest {
@Autowired
private PersonService personService;
@Autowired
private PersonRepository personRepository;
@Autowired
private BlockRepository blockRepository;
@Test
void getPeopleExcludeBlocks(){
givenPeople();
List<Person> result = personService.getPeopleExcludeBlocks();
result.forEach(System.out::println);
// for each - 스트림 이용하는 방식: result 의 각 개체가 한줄씩 출력됨
}
@Test
void getPeopleByName(){
givenPeople();
List<Person> result = personService.getPeopleByName("martin");
result.forEach(System.out::println);
}
@Test
void cascadeTest(){
givenPeople();
List<Person> result = personRepository.findAll();
result.forEach(System.out::println);
Person person = result.get(3);
person.getBlock().setStartDate(LocalDate.now());
person.getBlock().setEndDate(LocalDate.now());
personRepository.save(person);
personRepository.findAll().forEach(System.out::println);
// personRepository.delete(person);
// personRepository.findAll().forEach(System.out::println);
// personRepository.findAll().forEach(System.out::println);
person.setBlock(null);
personRepository.save(person);
personRepository.findAll().forEach(System.out::println);
blockRepository.findAll().forEach(System.out::println);
}
@Test
void getPerson(){
givenPeople();
Person person = personService.getPerson(3L);
System.out.println(person);
}
private void givenPeople() {
givenPerson("martin", 10, "A");
givenPerson("david", 9, "B");
givenBlockPerson("dennis",7,"O");
givenBlockPerson("martin",11,"AB");
}
private void givenPerson(String name, int age, String bloodType) {
personRepository.save(new Person(name, age, bloodType));
}
private void givenBlockPerson(String name, int age, String bloodType){
Person blockPerson = new Person(name, age, bloodType);
blockPerson.setBlock(new Block(name));
personRepository.save(blockPerson);
}
}
*personRepositoryTest.java
package com.fastcampus.javaallinone.project3.mycontact.repository;
import com.fastcampus.javaallinone.project3.mycontact.domain.Person;
import com.fastcampus.javaallinone.project3.mycontact.domain.dto.Birthday;
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.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));
}
@Test
void findByBloodType(){
givenPerson("martin", 10, "A");
givenPerson("david", 9, "B");
givenPerson("dennis", 8, "O");
givenPerson("sofia", 7, "AB");
givenPerson("benny", 6, "A");
givenPerson("john", 5, "A");
List<Person> result = personRepository.findByBloodType("A");
result.forEach(System.out::println);
}
@Test
void findBirthdayBetween(){
givenPerson("martin", 10, "A",LocalDate.of(1991,8,30));
givenPerson("david", 9, "B", LocalDate.of(1992,7,10));
givenPerson("dennis", 8, "O", LocalDate.of(1993,1,5));
givenPerson("sofia", 7, "AB",LocalDate.of(1994,6,30));
givenPerson("benny", 6, "A", LocalDate.of(1995,8,30));
List<Person> result = personRepository.findByMonthOfBirthday(8);
result.forEach(System.out::println);
}
//메서드 오버로딩
private void givenPerson(String name, int age, String bloodType){
givenPerson(name, age, bloodType, null);
}
private void givenPerson(String name, int age, String bloodType, LocalDate birthday){
Person person = new Person(name, age, bloodType);
person.setBirthday(new Birthday(birthday));
personRepository.save(person);
}
}
패스트캠퍼스 강의: https://bit.ly/3ilMbIO
Java 웹 개발 마스터 올인원 패키지 Online. | 패스트캠퍼스
자바 기초문법부터 프로젝트 실습까지 Java 문법부터 스프링/스프링부트, 트렌디한 기술인 JPA까지 모두 배우는 온라인 강의입니다.
www.fastcampus.co.kr
반응형
'언어공부 > JAVA&SPRING' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 32회차 미션 (0) | 2020.09.10 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 31회차 미션 (0) | 2020.09.09 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 29회차 미션 (0) | 2020.09.07 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 28회차 미션 (0) | 2020.09.06 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 27회차 미션 (0) | 2020.09.05 |
댓글