//////
Search
📓

11/24 회고록

생성일
2022/11/27 14:17
태그

김상호

이가현

알고리즘

피보나치 수열
1,1,2,3,5,8,13,21,34 ……………
위의 순서와 같이 fib(1),fib(2) =1이고
fib(3)은 fib(1)+fib(2) =2 이다
그러므로 리턴 값은 fib(n-1)+fib(n-2)의 조건을 갖는다
public class Fibonacci { public static int fib(int n) { //1, 2번째는 1이기 때문에 탈출하는 조건으로 설정 if (n == 1 || n == 2) return 1; return fib(n - 1) + fib(n - 2); } public static void main(String[] args) { int r = fib(6); //n번째 수 System.out.println(r); } }
Java
복사

임학준

조국현

최아영

Spring Boot JPA

JPA 어노테이션
@OneToMany 속성
tartgetEntity
관계를 맺을 Entity Class를 정의한다.
cascade
현 Entity의 변경에 대해 관계를 맺은 Entity도 변경 전략을 결정한다.
fetch
FetchType이 EAGER이면 연관된 엔티티를 바로 로딩한다.
FetchType이 LAZY이면 연관된 엔티티를 바로 로딩하지 않고 실제로 해당 객체를 조회할 때 해당 엔티티를 로딩한다
mappedBy
양방향 관계 설정시 관계의 주체가 되는 쪽에서 정의한다.
orphanRemoval
관계 Entity에서 변경이 일어난 경우 DB 변경을 같이 할지 결정한다.
cascade와 차이점은 cascade는 JPA 레이어 수준이고 이것은 DB레이어에서 처리한다.
<Hospital.java>
public class Hospital { @Id private Integer id; private String roadNameAddress; private String hospitalName; @OneToMany(mappedBy = "hospital", fetch = FetchType.LAZY) private List<Review> reviews;
SQL
복사
@ManyToOne 속성
optional
true이면 해당 객체에 null이 들어갈 수 있다는 의미이다.
fetch
FetchType이 EAGER이면 연관된 엔티티를 바로 로딩한다.
FetchType이 LAZY이면 연관된 엔티티를 바로 로딩하지 않고 실제로 해당 객체를 조회할 때 해당 엔티티를 로딩한다
cascade
영속성 전이 설정을 할 수 있다.
targetEntity
연관된 언테티의 타입 정보를 설정하는데 거의 사용하지 않는다.
@JoinColumn 속성
name
매핑할 외래 키의 이름을 지정할 때 사용한다.
referenceColumnName
외래 키가 참조하는 대상 테이블의 컬럼명을 의미한다.
<Review.java>
public class Review { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String content; private String userName; @ManyToOne @JoinColumn(name = "hospital_id") private Hospital hospital;
SQL
복사
리뷰 등록 기능
<ReviewCreateRequest.java>
@Builder @AllArgsConstructor @NoArgsConstructor @Getter public class ReviewCreateRequest { private Integer hospitalId; private String title; private String content; private String userName; }
Java
복사
<ReviewCreateResponse.java>
@Builder @AllArgsConstructor @NoArgsConstructor @Getter public class ReviewCreateResponse { private Long id; private String title; private String content; private String userName; private String message; }
Java
복사
<ReviewRepository.java>
public interface ReviewRepository extends JpaRepository<Review, Long> { }
Java
복사
<ReviewService>
@Service public class ReviewService { private final ReviewRepository reviewRepository; private final HospitalRepository hospitalRepository; public ReviewService(ReviewRepository reviewRepository, HospitalRepository hospitalRepository) { this.reviewRepository = reviewRepository; this.hospitalRepository = hospitalRepository; } public ReviewCreateResponse add(ReviewCreateRequest reviewCreateRequest) { Optional<Hospital> hospital = hospitalRepository.findById(reviewCreateRequest.getHospitalId()); Review review = Review.builder() .title(reviewCreateRequest.getTitle()) .content(reviewCreateRequest.getContent()) .userName(reviewCreateRequest.getUserName()) .hospital(hospital.get()) .build(); Review savedReview = reviewRepository.save(review); return new ReviewCreateResponse(savedReview.getId(), savedReview.getTitle(), savedReview.getContent(), savedReview.getContent(), "리뷰 등록이 성공 했습니다."); } }
Java
복사
<HospitalController.java>
@PostMapping("/{id}/reviews") public ResponseEntity<ReviewCreateResponse> get(@PathVariable Integer id, @RequestBody ReviewCreateRequest reviewCreateRequest) { return ResponseEntity.ok().body(reviewService.add(reviewCreateRequest)); }
Java
복사