매핑 어노테이션 종류

어노테이션 설 명
@Column 컬럼 매핑
@Temporal 날짜 타입 매핑
ex) @Temporal(TemporalType.TIMESTAMP)


@Enumerated enum 타입 매핑
ex) @Enumerate(EnumType.STRING)
@LOB BLOB, CLOB 매핑 ( 대형 오브젝트를 의미 )
( String 자료형을 @Lob 어노테이션을 사용해 매핑하면 DB 에는 자동으로 CLOB 으로 매핑된다 )
@Transient 특정 필드를 컬럼과 매핑하고싶지 않은 경우 사용
( 데이터베이스에 저장 X, 조회 X )
주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용

 

 

 

 

 

@Column 속성

속성 설명 기본 값
name 필드와 매핑할 테이블 컬럼 이름

ex) @Column(name = "user_id")
객체의 필드 이름
insertable
updateable
등록, 변경 가능 여부

ex) @Column(updatable = false)
TRUE
nullable (DDL) null 값의 허용 여부를 설정
false 로 설정하면 DDL 생성 시에 not null 제약 조건이 붙는다

ex) @Column(nullable = false)
 
unique (DDL) @Table 의 uniqueConstraints 와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용

ex) @Column(unique = true)
( 유니크 제약조건의 이름이 랜덤으로 생성되므로 잘 사용하지 않는다 )
 
columnDefinition (DDL) 데이터베이스 컬럼 정보를 직접 줄 수 있다

ex) @Column(columnDefinition = "varchar(100) default 'EMPTY'")
=> varchar(100) 으로 컬럼 생성, 기본 값은 'EMPTY' 로 지정된다
필드의 자바 타입과 방언 정보를 사용
length (DDL) 문자 길이 제약조건, String 타입에만 사용한다

ex) @Column(length = 10)
=> varchar(10) 으로 컬럼이 생성된다
255
precision,
scale (DDL)
BigDecimal 타입에서 사용한다 ( BigInteger 도 사용 가능 )  

 

 

 

 

 

@Enumerated 속성

※ 주의 ! ORDINAL 은 사용 X ( 기본 값이기 때문에 변경해서 사용!!! ) ※

속성 설명 기본 값
value • EnumType.ORDINAL : enum 순서를 데이터베이스에 저장

• EnumType.STRING : enum 이름을 데이터베이스에 저장

ex) @Enumerated(EnumType.STRING)
EnumType.ORDINAL

 

 

 

 

 

@Temporal 속성

JAVA 에서 자료형을 LocalDate, LocalDateTime 을 사용하는 경우는 자동으로 매핑해준다

즉, 속성 생략이 가능 ( 최신 하이버네이트 지원 )

LocalDate : DB 의 DATE 와 매핑

LocalDateTime : DB 의 TIMESTAP 와 매핑

속성 설명 기본 값
value TemporalType.DATE : 날짜, 데이터베이스의 date 타입과 매핑
( 예 : 2024-05-20 )

TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑
( 예 : 10:57:23 )

TemporalType.TIMESTAMP : 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
( 예 : 2024-05-20 10:57:23 )
 

 

 

728x90

 

 

 

 

 

영속성 컨텍스트

영속성 컨텍스트란 엔티티를 영구 저장하는 환경으로써, 애플리케이션과 데이터베이스 사이에서 엔티티를 관리하는 논리적인 영역이다.

이를 통해 1차 캐시, 동일성 보장, 트랙잭션 지원, 쓰기 지연, 변경 감지, 지연 로딩 등 다양한 기능을 제공하며 영속성 컨텍스트는 한 트랜잭션 단위 ( 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위 - 논리적 단위 ) 에서만 존재했다가 한 트랜잭션이 종료되면 영속성 컨텍스트도 삭제된다.

 


 

비영속

Member member = new Member();

객체만 생성한 상태로써 아직 영속성 컨텍스트에 저장하지 않은 상태 - 비영속 ( new / trasient )

 

 

 

 

 

영속

em.persist(member);

엔티티 매니저의 persist() 메소드를 사용해 member 객체를 영속성 컨텍스트에 저장한 상태 ( 영속성 컨텍스트에 의해 member 객체가 관리되는 상태 )

 

 

 

 

 

준영속

// 특정 엔티티만 준영속 상태로 전환한다.
em.detach(member);
// 영속성 컨텍스트를 완전히 초기화한다.
em.clear();
// 영속성 컨텍스트를 종료한다.
em.close();

JPA 에서 준영속 상태란 이전에 영속 상태에 있던 엔티티 객체가 영속성 컨텍스트에서 분리되어 더 이상 관리되지 않는 상태를 나타낸다.

준영속 상태의 엔티티는 JPA 가 더 이상 추적하거나 관리하지 않는다.

 

 

 

 

 

삭제

em.remove(member);

엔티티 인스턴스를 영속성 컨텍스트에서 제거하며 데이터베이스에서 삭제한다.

 


 

 

 

 

 

1차 캐시

  • 영속성 컨텍스트 내부에 캐시를 가지고 있다.
  • 엔티티를 영구 저장하는 환경으로 트랜잭션 단위의 메모리 공간이다.
  • 조회 시, 1차 캐시를 통해 엔티티를 빠르게 찾을 수 있다.
  • 데이터베이스에 접근하지 않고도 엔티티의 동일성을 보장한다.

 

동일성 보장

  • 1차 캐시를 통해 같은 엔티티를 조회하면 동일한 참조값을 반환한다.
  • Java 컬렉션처럼 동일한 주소의 값을 가져오는 것과 유사하다.

 

쓰기 지연

  • 엔티티 매니저의 persist 호출 시 데이터베이스에 저장되지 않고 1차 캐시에 저장된다.
  • 트랜잭션 커밋 시점에 쿼리가 발생하여 최적화가 가능하다.

 

변경 감지

  • 엔티티의 변경 사항을 감지하여 자동으로 UPDATE 쿼리를 생성한다.
  • 1차 캐시의 스냅샷과 비교하여 변경 여부를 확인한다.
728x90

'BE > JPA' 카테고리의 다른 글

[JPA] 매핑 어노테이션 종류  (0) 2024.05.20
[JPA] 프로젝트 세팅, JPA insert, JPA select, JPA update  (0) 2024.05.11
[JPA] H2 Databas 설치, IntelliJ 설치  (1) 2024.05.09
[JPA] JPA 란?  (0) 2024.05.09

 

 

 

 

 

프로젝트 세팅, JPA insert, JPA select, JPA update

 

테이블을 간단히 작성 > 테이블 만들어진 것 확인

 

 

IntelliJ 프로젝트 코드는 인프런 참조

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 | 김영한 - 인프런

김영한 | JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 실무에서도

www.inflearn.com

 

Member 클래스 생성 ( Entity 어노테이션으로 해당 클래스를 DataBase 역할을 하는 빈 객체로 등록 후 id, name 변수 선언 및 getter / setter 선언 ), Id 어노테이션을 사용해서 id 값이 primary key 임을 선언

 

DB 안에 데이터 빈 것 확인 >> jpa 를 사용하여 DB 에 데이터 저장 >> 데이터 저장된 것 확인

 

try catch finally 를 사용하여 예외 처리 및 자원 관리를 진행

 

위와 같이 insert 문을 다시 실행시켜 id : 2 , name : HelloB 데이터를 입력하려고 하니 기존에 DB 에 있던 id : 1, name : HelloA 데이터가 삭제되고 새로 넣은 데이터만 나오는 것을 확인

 

persistence.xml 에서 hibernate 옵션 중 hbm2ddl.auto 의 값이 create 로 설정되어 있는데 이 설정은 애플리케이션을 재시작할 때마다 데이터베이스를 새로 생성하기 때문에 기존 데이터가 삭제되므로 해당 값을 update 로 변경해주거나 주석처리한다 ( 나는 주석처리 후 진행 ) >> 이후 다시 명령문 실행 후 확인

( 배포 환경에서는 이 속성 자체를 사용하지 않는 편이 좋다 )

 

entityManager 의 find 메소드를 사용하여 id 값이 1인 데이터를 찾아온 뒤 출력 >> 찾아온 데이터의 name 값을 HelloJPA 로 변경 >> 변경된 것 확인

728x90

 

 

 

 

 

H2 Database 설치

내가 듣는 강의에서는 H2 DataBase 를 사용하므로 해당 데이터베이스를 다운로드 받았다

 

Downloads

Downloads Version 2.2.224 (2023-09-17) Windows Installer (SHA1 checksum: 1e4cda116519e8f95cac8298b1a4d7cbd50073ec) Platform-Independent Zip (SHA1 checksum: 8de40da72b269ae1d7a899f25aa0bbcb242b6220) Version 2.1.214 (2022-06-13) Windows Installer (SHA1 check

h2database.com

( Window : Windows Installer, Mac : All Platforms )

 

설치 후 cmd 로 설치 폴더/bin 폴더까지 접속하여 h2.bat 명령어를 실행하여 서버를 실행시킨다

mac 의 경우 command 로 설치 폴더/bin 폴더까지 접속하여  h2.sh 명령어 입력

( mac 에서 bin 경로까지 이동했을때 권한을 변경해준 뒤 h2.sh 를 터미널로 실행시켜줘야 한다 )

h2.sh 파일의 권한 변경 코드 - chmod 755 h2.sh

 

서버가 실행되면 localhost:8082 로 접속이 가능하다 >> 사용자 명을 sa 로 그냥 두고 연결 클릭 시 연결됨

 

위 과정까지가 DataBase 파일을 생성하는 과정이다

 

이후 좌측 상단의 N 모양 버튼을 눌러 접속을 종료해주고

 

tcp 방식으로 JDBC 주소를 변경해준 뒤 연결을 눌러준다

 

 

 

 


 

 

 

 

 

IntelliJ 설치

 

최고의 Java 및 Kotlin IDE인 IntelliJ IDEA를 다운로드하세요

 

www.jetbrains.com

IntelliJ Community Edition ( 무료 ) 버전 설치

 

New Project >> Maven 프로젝트 생성 및 Java 버전 다운로드 >> 나는 제일 최신 버전인 22 버전을 사용할 것임

( 22 버전에 문제가 생겨서 21 버전으로 진행했음 )

 

프로젝트 이름과 프로젝트 생성할 폴더 선택 후 Create

 

프로젝트 생성 완료

 

만약 기존에 STS 로 java 를 다른 버전으로 사용하다가 자바 버전이 충돌난다면?

▼ STS 자바 버전 설정하는 방법 ▼

 

[Spring] STS 에서 사용할 자바 버전 선택하기

JPA 를 학습하느라 IntelliJ 를 설치 후 java22 버전을 설치했는데 원래 설치되어 있던 java 11 버전과 충돌이 발생함 이 경우 sts 설치 폴더 > STS.ini 파일에 사용할 java 의 버전을 명시해주면 된다  위

youngho3358.tistory.com

 

728x90

 

 

 

 

 

JPA 란?

- Java Persistence API (JPA)는 자바 어플리케이션과 데이터베이스 간의 객체-관계 매핑을 위한 표준 인터페이스입니다. JPA는 객체 지향 프로그래밍 모델을 사용하여 데이터베이스를 다룰 수 있게 해주며, Hibernate와 같은 구현체를 통해 실제로 데이터베이스와 상호 작용합니다. JPA를 사용하면 개발자는 복잡한 SQL 쿼리를 작성하는 대신 자바 객체를 조작하여 데이터베이스 작업을 수행할 수 있습니다.

 

 

 

 

 

JPA 의 장점

1. 객체 지향적인 접근 방식 : JPA 는 데이터베이스와 객체 간의 매핑을 지원

2. 생산성 향상 : JPA 는 반복적이고 지루한 SQL 쿼리 작성을 줄여줌

3. 표준 인터페이스 : JPA는 Java Persistence API로 표준화되어 있어 다양한 JPA 구현체(예: Hibernate, EclipseLink)를 선택할 수 있음

 

JPA 의 단점

1. 성능 문제 : 잘못된 쿼리 작성이나 부적절한 설정으로 인해 성능 문제가 발생할 수 있음 ( 이를 최적화하기 위해 추가적인 노력이 필요 )

2. 복잡성 : JPA 는 풍부한 기능을 제공하지만 종종 단순한 데이터베이스 작업에는 ORM보다 간단한 방법이 더 적합할 수 있음

 

728x90

+ Recent posts