[JPA] - 찐 JPA(1)

yeom yaloo·2023년 12월 14일
0

FISA

목록 보기
21/61

Spring Data JPA 대신 사용하는 찐 JPA API

[mysql vs oracle]

1.오라클

  • 자동 순서를 부여해서 증가시키는 기술
  • sequence
  • create sequence 문법으로 생성
  • oracle 객체라 표현한다.

2.mysql

  • 자동으로 순서를 부여하면서 증가시키는 기술이다.
  • auto_increment
  • table 생성 문장에서 컬럼에 선언 문장에 포함해서 적용한다.

[persist 단어 이해하기]

  • 영속성: 데이터베이스 사용의 주 목적이 영속성이다.
    RDBMS가 영속성을 보장하는 소프트웨어이다. 그러나 영속성을 보장하기 때문에 비싸다.
  • 임시 메모리: 시스템 전원 종료 시 휘발된다.
  • 영구 메모리: 시스템 전원 종료에도 정보가 휘발되지 않고 정보가 저장된다.(영속성 기질)

[참고]

실시간 데이터 처리에는 임시 메모리(인메모리)
사용후 영구적으로 저장해야할 때는 RDBMS에 저장한다.
인메모리의 대표 sw - redis

[JPA]

1. JPA?

  • java persistence API

2. 기능

  • 이미 설계된 RDBMS 구조를 자동 생성
  • 권장
    • 복잡한 테이블 관계 형성 및 생성은 순수 sql 문장을 추천한다.
    • 매우 복잡한 sql 문장은 jpa API로 해결 잘 안되는 경우도 다수 존재한다.
      : JDBC API + 순수 SQL 문장으로 개발하는 메서드 개발 + JPA
    • 존재하는 테이블 삭제, 테이블 생성, pk, fk들을 생성한다.

3. JPA의 장점

  • 잦은 요구사항 변동으로 테이블 구조 자체가 변경되는 일이 다수 있다.
  • 전통 방식의 경우 테이블을 삭제하고 테이블을 다시 만들고 이관시켜놓은 데이터를 다시 만든 테이블로 이관시키는 작업을 진행하고 자바소스를 또 수정하고 컴파일 다시하고 배포하는 등의 귀찮은 작업이 반복됐다.
  • JPA 사용 방식의 경우엔 entity 클래스의 변수로 table 구조를 자동 수정 가능하다.

4. 순수 자바 코드로 DDL(create, drop, alter), DML 처리가 가능

  • 각각의 기능 수행 가능한 메서드가 존재

5. JPA API 사용 방법

5-1. JPA Framework의 설정 파일 작업 (persistence.xml)

  • framework 설정 파일 = Persistence.xml

    • 테이블과 1:1 매핑되는 즉 테이블 구조를 결정해주는 자바의 엔티티 클래스를 등록한다.

      • [이클립스 기반의 설정 방법]
        persistence.xml 선택하고 오른쪽 버튼을 클릭해서 JPA Tools에서 synchronized Class List를 누르면 @Entity로 선언한 모든 클래스를 자동으로 등록해준다.
    • db의 접속 url 정보

    • id/pw

    • 어떤 데이터베이스를 사용할 것인지를 선택

    • 실행되는 sql문장 확인, 가독성 고려, 부연설명

    • *(중요)
      create : DDL
      none : DML(Select 포함) / 운영 서버의 필수 값**

    5-2. 참고

  • xml파일의 tag명과 구조는 스펙으로 제시되고 있다.(스펙은 변경이 불가)

  • JPA를 사용하는 개발자는 스펙에 맞게 값만 설정하면 된다.

  • db url 구성시에 다중 속성값들 구분자는 &를 사용한다. 속성=값&속성2=값, xml 상에서 오류 발생시 해결책은 특수문자를 xml 특수문자를 사용해서 해결하면 된다. (& = &emp ...)
    -> xml의 경우엔 특수 문자가 바로 인식되지 않기 때문에 xml 특수문자를 찾아서 넣어주면 된다.

[JPA 주요 애너테이션]

1. @Entity

  • 테이블과 1:1 매핑할 때 사용한다.
  • 엔티티 클래스를 의미한다.
  • 클래스명이 테이블명으로 자동 적용된다.
  • 엔티티 객체 생성시 하나가 table의 하나의 row

2. @Column

  • 테이블 컬럼명을 의미한다.
  • 변수명이 컬럼명으로 자동 반영한다.
  • 단, 수정도 가능하다. @Column(name="변경할_이름")
  • 자바 변수 타입이 부합되는 RDBMS 데이터 타입

3. sequence 또는 auto_increment 설정

  • @GeneratedValue(strategy = GenerationType.IDENTITY) //mysql
  • @GeneratedValue // oracle

4. @Id

  • pk 설정에 사용하는 애노테이션이다.
  • @Entity가 붙은 클래스내에 @Id는 생략이 불가하다.
  • 참고: 실무에서 가장 많이 사용되는 pk 컬럼 타입은 숫자타입이라고 한다 ~
profile
즐겁고 괴로운 개발😎

0개의 댓글