Spring-Boot JPA: 어노테이션
3106 단어 spring-boot-jpaspring-boot-jpa
JPA
소개
- Java Persistence API
- Object-Relation Mapping, ORM 프레임워크
- 비즈니스 로직에 집중 가능
- 여러 구현체 제공: Hibernate, EclipseLink, DataNucleus 등
- 객체와 DB 테이블 사이의 매핑
애플리케이션 객체를 분석해서 적절한 sql를 생성하여 JDBC API를 이용하여 DB 사용
JDBC API 란?
- Java DataBase Connectivity API
- 자바 프로그램 내에서 DB의 종류에 상관없이 DB와 관련된 작업들을 처리할 수 있도록 도와주는 API
장점
- CRUD SQL를 작성할 필요가 없다.
- 조회된 결과를 객체로 매핑하는 작업도 대부분 자동으로 처리한다.
- 데이터 저장 계층에서 작성해야 할 코드가 대폭 줄어든다.
- SQL이 아닌 객체 중심으로 개발하며 생산성과 유지보수가 좋아진다.
- DB 변경 시 코드를 거의 수정하지 않고 손쉽게 변경할 수 있다.
JPA가 해결해주는 문제점
SQL을 직접 다룰 때 발생하는 문제점
- DB에 데이터를 관리하려면 SQL 사용
- 자바로 작성한 애플리케이션은 JDBC API 사용
=> CRUD 반복 - 해결: JPA를 사용함으로써 개발자는 직접 SQL을 작성하는 것이 아니라 JPA가 제공하는 API를 사용하면 된다.
패러다임의 불일치
- 애플리케이션이 발전하면서 내부의 복잡성이 커짐
- 객체지향 프로그래밍은 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공
예: 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 - BUT, 관계형 DB는 데이터 중심으로 구조화 -> 위의 객체지향 프로그래밍은과 같은 장치들이 없다.
- 해결: JPA가 객체와 테이블을 매핑해서 패러다임의 불일치를 개발자 대신 해결해준다.
Spring-boot JPA 어노테이션
객체
@Entity
- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다.
- @Entity가 붙은 클래스는 JPA가 관리한다.
제약 사항
- 기본 생성자는 필수로 구현해야 한다.
- final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
- 저장할 필드에 final을 사용하면 안 된다.
속성
- name: 엔터티 이름을 지정, 기본값은 클래스 이름
@Table
- 엔터티와 매핑할 테이블을 지정한다.
속성
- name: 매핑할 테이블의 이름을 지정
- catalog: DB의 catalog를 매핑
- schema: DB 스키마와 매핑
- uniqueConstraint : DDL 쿼리를 작성할 때 제약 조건을 생성
기본키
@Id
기본키 생성 방법
- 기본 키를 직접 할당
@Id 만 사용
- 자동 생성 전략 사용
@GeneratedValue 추가 및 키 생성 전략 선택
키 생성 전략
- IDENTITY: 기본 키 생성을 데이터베이스에 위임한다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
- SEQUENCE: 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.
- TABLE: 키 생성 테이블을 사용한다.
- AUTO: 선택한 데이터베이스의 방식이 따라 위의 세 가지 전략 중 하나를 자동으로 선택한다.
필드
@Column
- 객체 필드와 DB 테이블 칼럼을 매핑한다.
속성
- name
매핑할 테이블의 칼럼 이름을 지정
- insertable
- true: 엔터티 저장 시 선언된 필드도 같이 저장
- false: 데이터베이스에 저장하지 않는다. (읽기 전용일 때 사용)
- updatable
- true: 엔터티 수정 시 선언된 필드도 같이 수정
- false: 데이터베이스를 수정하지 않는다. (읽기 전용일 때 사용)
- table
지정한 필드를 다른 테이블에 매핑
- nullable
null 허용 여부를 결정
- unique
제약 조건을 걸 때 사용
- columnDefinition
DB 컬럼 정보를 직접적으로 지정할 때 사용
- length
varchar의 길이를 조정(기본값 255)
- precision, scale
BigInteger, BigDecimal 타입에서 사용
각각 소수점 포함 자리수/소수의 자리수를 의미
Author And Source
이 문제에 관하여(Spring-Boot JPA: 어노테이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@im-shung/JPA-Spring-boot-JPA-어노테이션
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@Id 만 사용
@GeneratedValue 추가 및 키 생성 전략 선택
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
매핑할 테이블의 칼럼 이름을 지정
- true: 엔터티 저장 시 선언된 필드도 같이 저장
- false: 데이터베이스에 저장하지 않는다. (읽기 전용일 때 사용)
- true: 엔터티 수정 시 선언된 필드도 같이 수정
- false: 데이터베이스를 수정하지 않는다. (읽기 전용일 때 사용)
지정한 필드를 다른 테이블에 매핑
null 허용 여부를 결정
제약 조건을 걸 때 사용
DB 컬럼 정보를 직접적으로 지정할 때 사용
varchar의 길이를 조정(기본값 255)
BigInteger, BigDecimal 타입에서 사용
각각 소수점 포함 자리수/소수의 자리수를 의미
Author And Source
이 문제에 관하여(Spring-Boot JPA: 어노테이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@im-shung/JPA-Spring-boot-JPA-어노테이션저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)