김상호
이가현
알고리즘
•
피보나치 수열
◦
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
복사