Java190 SpringDataJPA - 메서드 및 유연한 반환타입 SpringDataJPA 주요 메서드save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다. delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출 findById(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출 getOne(ID) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출 findAll(…) : 모든 엔티티를 조회한다. 정렬( Sort )이나 페이징( Pageable ) 조건을 파라미터로 제공할 수 있다.참고: JpaRepository 는 대부분의 공통 메서드를 제공한다.쿼리메소드 기능쿼리 메소드 기능 3가지- 메소드 이름으로 쿼리 생성(간단한 쿼.. 2024. 1. 9. 문자열과 String 클래스 Contains() 문자열에 지정 문자열이 포함되어 있는지 확인한다. // str2를 포함시 1을 리턴, 포함x : 2를 리턴 public int Solution(String str1, String str2){ return (str1.contains(str2)? 1: 2); 문자열의 길이를 구하는 메서드 length String s = "ABC이지스DEF"; int length = s.length(); // 9 System.out.println(length); 문자열 안에서 특정 문자를 꺼내는 메서드 charAt String s = "ABC이지스DEF"; char c = s.charAt(0); // A System.out.println(c); 부분 문자열을 꺼내는 메서드 substring. String .. 2024. 1. 5. Optional<T> Optional 는 T타입의 객체를 감싸는 래퍼 클래스이다. 모든 타입의 참조변수를 담을 수 있다. Optional객체에 담아서 반환하면 반환결과가 null인지 체크할 필요 없이 정의된 메서드를 통해 처리할 수 있다. Optional 객체 생성 Optional 객체를 생성할 때는 of() 또는 ofNullable()를 사용한다. public Optional findById(Long id){ Member member = em.find(Member.class, id); return Optional.ofNullable(member); } 참조변수의 값이 null일 가능성이 있으면 ofNullable()를 사용해야한다(of 사용시 NullPointerException발생) // 빈 객체로 초기화 Optional.. 2024. 1. 5. InteliJ test 설정 설정이 Gradle로 되어있으면 test 로딩속도가 느릴 수 있다, InteliJ IDEA로 둘 다 변경해준다 2024. 1. 5. JPA실전 2 - OSIV와 성능 Open Session In View: 하이버네이트, Open EntityManager In View: JPA (관례상 OSIV라 한다.) spring.jpa.open-in-view : true 기본값 OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트 와 데이터베이스 커넥션을 유지한다. 이를 통해 지연로딩이 가능하지만, 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있다. 이것은 결국 장애로 이어진다 spring.jpa.open-in-view: false OSIV 종료 open-in-view: false 로 해야 커넥션풀이 마르지 않음. OSIV를 끄면 커넥션.. 2023. 12. 12. JPA 실전2편 - 주문조회 API 쿼리 방식 선택 권장 순서 1. 우선 엔티티를 DTO로 변환하는 방법을 선택한다. 2. 필요하면 페치 조인으로 성능을 최적화 한다. 대부분의 성능 이슈가 해결된다. 3. 그래도 안되면 DTO로 직접 조회하는 방법을 사용한다. 4. 최후의 방법은 JPA가 제공하는 네이티브 SQL이나 스프링 JDBC Template을 사용해서 SQL을 직접 사용한다 주문+배송정보+회원을 조회하는 API 양방향 연관관계가 걸린 곳은 꼭! 한 곳을 @JsonIgnore 처리해야한다. 안그러면 양쪽을 서로 호출하면서 무한루프발생. 엔티티를 API응답으로 노출하는것보다는 DTO로 변환해서 반환하는 것이 더 좋다. (실무에서는 List로 바로 반환하지말고 result객체로 한 번 더 감싸주자) 간단한 주문조회를 하는 컨트롤러 메서드.. 2023. 12. 12. 이전 1 ··· 3 4 5 6 7 8 9 ··· 32 다음