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?
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 컬럼 타입은 숫자타입이라고 한다 ~