15. 15. 가게 추가 - 2 ~ 16. 16. JPA
Persistence : 데이터를 영구적으로 가지고 싶다. java persistence application -> 자바에서 제일 유명한건Hibernate
-> 얼마나 유명하냐면, 자바 표준 jpa 가 hibernate 에서 나왔다는 말이 있을 정도
중요한 어노테이션
@Entity -> 모델에는 반드시 이것을 붙여줘야 에러가 안난다.
우리는 Spring data jpa 를 사용할 수 있다.
우리는 H2 database 중에 in-memory 방식을 활용할 예정이다.
@Entity 에는 반드시 identifier 가 있어야한다.
identifier 에 @Id 라고 붙여주면 되고, 생성 값을 넣어주라는 어노테이션은 @GeneratedValue
임시로 처리되는 거다! -> @Transient
hms application 에서는
@Table(name="category")
public class Category extends TimeEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private long categoryId;
....
형태가 비슷하게 들어간 것을 확인할 수 있다.
* 설치
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.h2database:h2'
-> build 에서 rebuild project 눌러서 싱크를 맞춘다.
package kr.co.fastcampus.eatgo.domain;
import org.springframework.data.repository.CrudRepository;
// crud 등의 다른 구현 없이도 reposirtoty를 이용할 수 있게 된다.
import java.util.List;
public interface MenuItemRepository extends CrudRepository<MenuItem, Long> {
List<MenuItem> findAllByRestaurantId(Long restaurantId);
void deleteById(Long id);
}
오늘 드디어 test all 을 배움
test -> configuration 누르고
name 을 test all 로 한다. 종류는 패키지, in whole project
new
: Optional<Restaurant> -> null safety 를 위한 자바 언어 null 인경우를 핸들링 해준다.
초록망치-> build
package kr.co.fastcampus.eatgo.domain;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
import java.util.Optional;
public interface RestaurantRepository extends CrudRepository<Restaurant, Long> {
List<Restaurant> findAll();
List<Restaurant> findAllByAddressContainingAndCategoryId(
String region, Long categoryId);
Optional<Restaurant> findById(Long id);
Restaurant save(Restaurant restaurant);
}
repository 구현체를 지워줌.
Optional.of(restaurant) -> option<Restaurant> 를 위한 test 작업
package kr.co.fastcampus.eatgo.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Restaurant {
@Id
@GeneratedValue
@Setter
private Long id;
@NotNull
private Long categoryId;
@NotEmpty
private String name;
@NotEmpty
private String address;
@Transient
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<MenuItem> menuItems;
@Transient
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<Review> reviews;
public String getInformation() {
return name + " in " + address;
}
public void updateInformation(Long categoryId,
String name, String address) {
this.categoryId = categoryId;
this.name = name;
this.address = address;
}
public void setMenuItems(List<MenuItem> menuItems) {
this.menuItems = new ArrayList<>(menuItems);
}
public void setReviews(List<Review> reviews) {
this.reviews = new ArrayList<>(reviews);
}
}
package kr.co.fastcampus.eatgo.application;
import kr.co.fastcampus.eatgo.domain.Reservation;
import kr.co.fastcampus.eatgo.domain.ReservationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
@Service
@Transactional
public class ReservationService {
private ReservationRepository reservationRepository;
@Autowired
public ReservationService(ReservationRepository reservationRepository) {
this.reservationRepository = reservationRepository;
}
public List<Reservation> getReservations(Long restaurantId) {
return reservationRepository.findAllByRestaurantId(restaurantId);
}
}
'스프링, 자바' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 50회차 미션 (0) | 2020.09.28 |
---|---|
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 49회차 미션 (0) | 2020.09.27 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 47회차 미션 (0) | 2020.09.25 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 46회차 미션 (0) | 2020.09.24 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 45회차 미션 (0) | 2020.09.23 |