일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- zoom
- 홈페이지제작견적
- IT용어
- 베른 떠돌이상인
- 가로세로세팅
- 애니츠 떠돌이상인
- 토토이크 떠돌이상인
- 이름바꾸기
- 작은화면
- 로헨델 떠돌이상인
- 루테란 떠돌이상인
- 특정페이지가로로
- sm
- 페이튼 떠돌이상인
- SSL
- 한글
- SE
- HWP
- https
- 욘 떠돌이상인
- 파푸니카 떠돌이상인
- 유튜브
- 슈샤이어 떠돌이상인
- SI
- PIP모드
- 아르데타인 떠돌이상인
- 3
- Today
- Total
도담도담
Spring Data JPA 개념 본문
ORM
- 객체 지향 개념을 이용하여 관계형 데이터베이스에 적용(보존) 하는 기술
- 즉, 객체지향을 관계형으로 매핑하는 개념
- 객체지향 구조와 관계형 데이터베이스와 유사
객체지향 | 관계형 데이터베이스 | |
데이터구조 | 클래스 | 테이블 |
데이터 | 멤버변수(데이터타입) | 컬럼(데이터타입) |
데이터 보관 | 인스턴스 | Row(레코드) |
차이점 | 객체지향 (행위)메서드 | |
데이터, 행위 | 데이터 | |
결론 | ORM은 객체지향과 관계형 사이의 변환 기법을 의미. |
JPA
- ORM을 Java 언어에 맞게 사용할 수 있도록 제공되는 스펙
- ORM이 상위 개념이고, JPA는 Java언어에 국한된 개념
- JPA는 단순한 스펙이기 때문에 구현체(Hibernate 등)마다 프레임워크가 다를 수 있다.
Hinernate
- 스프링 부트는 JPA 구현체 중 Hinernate를 이용
- Hibernate
- ORM을 지원하는 오픈소스 프레임워크
- 단독으로 프로젝트에 적용이 가능한 독립된 프레임워크
- 스프링부트 프로젝트 생성시 추가한 Spring Data JPA는 Hibernate를 쉽게 사용할 수 있도록 추가적인 API를 제공
Spring Data JPA
Spring Data JPA 를 이용하여 개발 시, 필요한 코드는 두종류
1. 엔티티 클래스 : JPA를 통하여 관리되는 객체 (엔티티객체)를 위한 클래스
2. Repository : 엔티티 객체들을 처리하는 기능을 보유한 인터페이스
Repository 인터페이스
- Spring Data JPA 에서 제공하는 인터페이스로 설계
- 스프링 내부에서 자동으로 객체를 생성하고, 실행하는 구조이기 때문에
- 개발자는 단순히 인터페이스를 하나 정의 하기만 하면 된다.
- Spring Data JPA 에는 여러 종류의 인터페이스 기능을 이용하여 JPA 관련 작업을 별도의 코드 개발 없이 처리할 수 있도록 지원한다.
- CRUD 작업, 페이징 처리, 정렬, 검색 등의 처리도 인터페이스의 메서드를 호출하는 형태롤 처리가 되는데, 기능에 따라 상속 구조로 추가적인 기능을 제공.
Hibernate를 단독으로 사용할 경우 | 모든 코드 직접 작성, 트랜젝션 처리도 직접 처리.. |
Spring Data JPA를 이용할 경우 | 모든 코드가 자동으로 생성되기 때문에 CRUD 작업, 페이징 작업 개발을 하지 않아도 된다. |
CrudRepository : 일반적인 CRUD 작업만 할 경우 사용
PagingAndSortRepository : 일반적인 CRUD 작업 + 페이징, 정렬 작업을 사용할 경우
JpaRepository : JPA 관련 모든 기능을 사용할 경우. (개발자가 가장 많이 사용하는 인터페이스)
JpaRepository 인터페이스
- Spring Data JPA는 이를 상속하는 인터페이스 선언만으로 모든 작업에 대한 개발이 끝난다.
- 실제 동작 시에는 스프링이 내부적으로 해당 인터페이스에 맞는 코드를 자동 생성한다!
- JpaRepository를 사용할 경우에는 엔티티 타입 정보와 @id 타입 정보를 Map 형태로 지정한다.
- Spring Data JPA는 인터페이스 선언만으로도 자동으로 스프링 빈(Bean)으로 등록한다!
- 즉, 스프링이 내부적으로 인터페이스 타입에 맞는 객체를 생성하여 빈(Bean)으로 등록!
기능설명 (annotation)
@Entity : Spring Data JPA 사용시 필수
해당 클래스는 엔티티 클래스이고,
해당 클래스의 인스턴스들이 JPA로 관리되는 엔티티 객체라는 것을 의미
옵션에 따라서 자동으로 테이블을 생성할 수도 있다.
이 경우 해당 클래스의 멤버변수 설정에 따라서 자동으로 컬럼까지 생성된다.
@Table : @Entity 어노테이션과 함께 사용 가능
관계형 데이터베이스에서 엔티티 클래스를 어떤 테이블로 생성할 것인지에 대한 정보를 담기 위한 어노테이션.
예) @Table(name = "tbl_memo") 의 경우
테이블 이름이 "tbl_memo"인 테이블을 생성
옵션을 이용하면 인덱스(indexes를 이용) 설정도 가능..
@Id : @Entity 가 붙은 클래스 내에는 반드시 Primary Key(PK)에 해당하는 특정 멤버변수를 @Id로 설정해야 한다.
만약 @Id 가 붙은 멤버변수에 입력되는 값이 사용자 입력이 아니라면
자동으로 생성되는 번호를 사용하기 위해서 @GeneratedValue 어노테이션을 사용한다.
예) @GeneratedValue(stratrgy = GenerationType.IDENTITY)
PK를 자동으로 생성할 때 사용 (이것을 키 생성전략 이라고 부름)
@GeneratedValue(stratrgy = GenerationType.IDENTITY)
만약,
연결되는 데이터베이스가 오라클일 경우 : 별도의 번호 저장을 위한 테이블이 자동 생성
연결되는 데이터베이스가 MySQL, MariaDB일 경우 : auto increment를 이용..
stratrgy 설정 값
GeneratoionType.AUTO : 기본값으로 JPA 구현체(Hinernate)가 생성 방식을 결정
GenerationType.IDENTITY : 사용하는 데이터베이스가 키 생성을 결정
GenerationType.SEQUENCE : 데이터베이스의 시퀀스를 이용하여 키를 생성. @SequenceGenerator 와 같이 사용
GenerationType.TABLE : 키 생성 전용 테이블을 생성하여 키 생성. @TableGenerator 와 함께 하용
@Column : 추가적인 필드(컬럼)가 필요한 경우에 사용
이 어노테이션은 다양한 설정을 위한 옵션을 제공
name ="컬럼명"
nullable = "NULL값 허용여부(true/false)"
length = 크기(20)
columnDefinition 을 이용하여 기본값을 설정할 수도 있다.
예)
MySQL, MariaDB일 경우 : columnDefinition = "varchar(255) default 'YES'"
오라클일 경우 : columnDefinition = "varchar2(255) default 'YES'"
만약 값을 사용자로부터 입력 받지만, 테이블에 저장을 하지 않을 경우에는
해당 멤버변수 위에 @Transient 를 이용하여 제외 시킬 수 있다.
그 외에 JPA는 다양한 어노테이션이 있음.
Lombok이 지원하는 주요 어노테이션
( import lombok.*; )
@ToString : toString 메서드를 재정의
@Getter : private 변수에 대한 getter 메서드 자동 생성
@Setter : private 변수에 대한 setter 메서드 자동 생성
@Builder : 해당 클래스에 대한 객체 생성 처리 (실제 사용시엔 클래스명.builder()를 이용)
단, 어노테이션을 사용할 경우에는 반드시
@AllArgsConstructor / @NoArgsConstructor 를 함께 설정해야 한다.
그렇지 않을 경우 컴파일 시 오류 발생!
각종 대표 설정파일 : application.properties
데이터베이스(DataSource) 설정
spring.datasource.driver-class-name=접속데이터베이스 드라이버 이름
spring.datasource.url=데이터베이스 접속 주소
- ( MySQL, MariaDB일 경우 : 데이터베이스 접속주소 / 데이터베이스명 )
- ( 오라클일 경우 : 데이터베이스 접속 주소 )
spring.datasource.username=사용자(접속)계정
spring.datasource.password=계정 접속 비밀번호
Spring Data JPA를 위한 설정
spring.jpa.hibernate.ddl-auto=프로젝트 실행시 자동으로 DDl을 생성 할 것인지 결정
create : 매번 테이블을 새롭게 생성
update : 변경이 필요할 경우에만 alter 되고, 테이블이 없을 경우에는 create
create-drop : 매번 테이블을 생성하고, 작업 종료 직전 생성된 테이블을 삭제
validate : 테이블에 유효성 검사
spring.jpa.show-sql=true/false
실제 JPA 구현체인 Hibernate가 처리 시에 발생하는 SQL을 보여줄 것인지 여부
spring.jpa.properties.hibernate.format-sql=true/false
실제 JPA 구현체인 Hibernate가 동작하면서 발생하는 SQL을 포맷팅(들여쓰기 등..)하여 출력
실행되는 SQL에 대한 가독성을 높일 경우에 설정
CRUD 및 페이징 작업
CRUD 작업 지원 메서드 (JpaRepository)
inset 작업 : save(엔티티 객체)
select 작업 : findById(키 타입) / getOne(키 타입) <=getOne은 향후 사라질 예정
update 작업 : save(엔티티 객체)
delete 작업 : deleteById(키 타입) / delete(엔티티 객체)
JPA의 구현체가 메모리상에서 객체를 비교하고 없으면 insert / 존재하면 update를 동작
'IT 공부 > KH 정보교육원' 카테고리의 다른 글
Thymeleaf 레이아웃 (0) | 2021.07.09 |
---|---|
thymeleaf 내용정리 (0) | 2021.07.08 |
프레임워크 구분 (0) | 2021.07.02 |
Lombok 라이브러리의 기본 어노테이션 요약 (0) | 2021.07.02 |
Mybatis에서 SQL 쿼리를 실행하는 방법 (0) | 2021.07.01 |