2023.06.21.수.TIL

heeh·2023년 6월 21일

TIL

목록 보기
26/82
post-thumbnail

Spring 입문

  • Hibernate가 자동으로 만들어주는 SQl을 보기 좋게 해줌
    • show_sql
    • format_sql
    • use_sql_comments
  • ddl-auto 옵션 5개
    1. create
      • 기존 table 전부 삭제 후 다시 생성
      • drop + create
    2. create-drop
      • create와 같지만 종료 시점에 table을 drop
    3. update
      • 변경만 부분만 반영
      • table이 없으면 만들고 있으면 만들지 않음
    4. validate
      • Entity와 table이 정상적으로 mapping 되었는지만 확인
      • Memo Entity Class가 있고 table에 memo라는 table이 있으면 정상적 mapping
    5. none
      • 아무것도 하지 않음
  • spring Boot환경은 EntityManagerFactory랑 EntityManager를 자동 생성
    • Java에서는 application.ptoperties
    • spring Boot에서는 application.ptoperties에 있는 정보를 바탕으로 EntityManagerFactory와 EntityManager를 자동 생성
  • Spring에서 트랜잭션 환경을 쉽게 만드는 방법 제공
    • 트랜잭션 환경이 어떻게 걸려 있는지 확인
    • SHIFT 2번 - SimpleJpaRepository - Classes - ctrl+f - save
    • Java 환경에서는 트랜잭션을 걸려면 EntityTransaction이 필요
    • Spring는 SimpleJpaRepository에서 상단에 @Transactional를 확인
      or 메서드에 걸면 메서드 자체에 트랜잭션 환경이 설정됨 → 해당 메서드 내에 수행되는 모든 데이터베이스 연산 내용들을 하나의 트랜잭션에 묶음
  • readOnly : 트랜잭션에서 데이터를 읽기만 할 때 사용(최적화)
  • 조회 시 트랜잭션이 필수는 아니지만 필요할 때가 있다!
  • 트랜잭션 환경이 잡혀 있지 않은 상태에서 persist를 호출하려고 하면 오류
    • @Disabled : 실행되지 않음, 메서드를 사용하지 않겠다, 오류 나는 테스트에 적용
  • @Transactional의 default REQUIRED 옵션, 부모 메서드에 Transactional이 존재하면 자식 메서드의 트랜잭션은 부모 메서드의 트랜잭션에 합류함
  • SpringDataJPA는 JPA를 쉽게 사용할 수 있게 만들어 놓은 모듈
  • Java의 generics, Spring 학습과 병행
    • generics : <T, ID> 같은.. 것의.. T… 바꿀 수 있는 부분?
    • 자바의 제네릭은 코드의 재사용성과 타입 안정성을 향상시키기 위한 기능
    • GPT - Java의 generics에 대해 간단한 예제를 보여줘
      import java.util.ArrayList;
      
      public class GenericsExample {
          public static void main(String[] args) {
              // ArrayList 생성 - 문자열을 저장하는 리스트
              ArrayList<String> stringList = new ArrayList<>();
      
              // 요소 추가
              stringList.add("Hello");
              stringList.add("World");
              stringList.add("!");
      
              // 요소 접근
              String firstElement = stringList.get(0);
              System.out.println("첫 번째 요소: " + firstElement);
      
              // ArrayList 생성 - 정수를 저장하는 리스트
              ArrayList<Integer> intList = new ArrayList<>();
      
              // 요소 추가
              intList.add(10);
              intList.add(20);
              intList.add(30);
      
              // 요소 접근
              int secondElement = intList.get(1);
              System.out.println("두 번째 요소: " + secondElement);
          }
      }
      이 예제에서는 ArrayList를 제네릭으로 사용하였습니다.
      ArrayList<String>은 문자열 객체를 저장하는 리스트를 나타내고,
      ArrayList<Integer>은 정수 객체를 저장하는 리스트를 나타냅니다.
      
      첫 번째 ArrayList인 stringList에는 문자열 요소 "Hello", "World", "!"를 추가하고,
      첫 번째 요소에 접근하여 출력합니다.
      
      두 번째 ArrayList인 intList에는 정수 요소 10, 20, 30을 추가하고,
      두 번째 요소에 접근하여 출력합니다.
      
      제네릭을 사용함으로써 각 리스트에서 다른 타입의 객체를 다룰 수 있으며,
      컴파일러가 타입 일치를 검사하여 오류를 방지합니다.
  • findById : ID에서 한 개 찾아오기
  • Optional : 메서드의 반환 타입으로 Optional을 사용하면, 해당 메서드가 값이 존재하지 않을 수 있는 상황을 명시적으로 표현할 수 있습니다.
profile
공부하자개발하자으쌰으쌰

0개의 댓글