[JPA] 스프링 부트 JPA : 기본 설정
[JPA] 스프링 부트 JPA : 기본 설정
1. 스프링 부트 기본 JPA 설정 하기
1-1. JPA Spring boot 셋팅
- 프로젝트 > Add Starter > JPA 체크
-
기타 연결 해야될 DB 데이터 소스 드라이버 설치 (ex. mariadb, mysql, oracle, d2, postgresql 등등.)
- application.properties 셋팅 설정
# 스프링 부트 톰캣 서버 포트 : 8080(기본값) -> 9090
server.port=9090
# JPA 데이터 소스 연결 : 마리아 DB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://127.0.0.1:3306/jpa_ex
spring.datasource.username=[DB유저id]
spring.datasource.password=[DB유저pw]
# JPA 테이블 생성과 관련된 설정
# 스키마 생성
spring.jpa.hibernate.ddl-auto=update
# create : 기존 테이블 삭제 후 다시 생성
# create-drop : create와 같으나 서버 종료시점에 테이블 drop
# update : 변경부분만 반영(★)
# validate : 엔티티와 테이블이 정상적으로 맵핑되었는지 확인
# none : jpa사용안함
# DDL 생성시 DB 고유의 기능 생성 여부
spring.jpa.generate-ddl=false
# 실행되는 SQL문 표시 여부
spring.jpa.show-sql=true
# 사용하는 DB mysql = mariadb
spring.jpa.database=mysql
# 로그레벨
logging.level.org.hibernate=info
# MYSQL 상세 지정
spring.jpa.database-platform=org.hibernate.dialect.MariaDB103Dialect
1-2. JPA Entity 클래스 설계
-
JPA Entity는 어노테이션을 바탕으로 클래스가 설계 된다
-
예) Board.java
package com.reboot.domain;
import java.sql.Timestamp;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@Entity //JPA 데이터 명시
@Table(name="tbl_board")//JPA DB에 생성되는 테이블
public class Board {
@Id//PK
@GeneratedValue(strategy = GenerationType.AUTO)
private Long bno;//ID
private String title;
private String writer;
private String content;
@CreationTimestamp//insert시 생성
private Timestamp regDate; //localDateTime
@UpdateTimestamp//update시 생성
private Timestamp updateDate; //localDateTime
}
- Hibernate JPA에 활용되는 어노테이션
어노테이션 | 설명 |
---|---|
@Id | 각 엔티티를 구별할 수 있도록 식별ID를 가지게 설계한다 (가장 중요) |
@GeneratedValue | @Id 식별키를 어떤 방식으로 생성할지 명시함 - strategy : 식별키 생성 방식 설정 - genertator : @TableGenerator(테이블생성), @SequenceGenerator(시퀀스생성) |
@Column | 데이터페이비스의 테이블을 구성할 때 인스턴스 변수가 칼럼이 되기 때문에 원한다면 칼럼명을 별도로 지정하거타 칼럼의 사이즈, 제약 조건들을 추가하기 위해서 사용한다. |
@Table | 클래스가 테이블이 되기 때문에 클래스의 선언부에 작성하여 테이블명을 어떻게 정할지 결정합니다. 만일 @Table이 지정되지 않으면 클래스 이름과 동일한 이름의 테이블이 생성됩니다. |
@Entity | 해당 클래스의 인스턴스들이 엔티티임을 명시한다. |
- @GeneratedValue, strategy 하위 옵션
@GeneratedValue(strategy = GenerationType.AUTO)
//PK 자동 생성 전략 : 데이터 베이스 특성에 맞게 자동 생성
@GeneratedValue(strategy = GenerationType.IDENTITY)
//PK 자동 생성 전략 : 기본키 생성은 DB에 위임 - mysql, mariadb
@GeneratedValue(strategy = GenerationType.SEQUENCE)
//PK 자동 생성 전략 : DB 시퀀스를 통해 생성 - oracle
@GeneratedValue(strategy = GenerationType.TABLE)
//PK 자동 생성 전략 : 별도의 채번 테이블을 활용하는 방식
- @Column 하위 옵션
Attribute | Type | Description | Default |
---|---|---|---|
name | String | 칼럼이름 | |
unique | boolean | 유니크여부 | true, false |
nullable | boolean | null허용여부 | true, false |
insertable | boolean | insert가능여부 | true, false |
updatable | boolean | update가능여부 | true, false |
table | String | 테이블이름 | |
length | int | 칼럼사이즈 | 255 |
precision | int | 소수정밀도 | 0 |
scale | int | 소수점 이하 자리수 | 0 |
- @Table 하위 옵션
Attribute | Type | Description | Default |
---|---|---|---|
name | String | 테이블이름 | |
catalog | String | 테이블카테고리 | |
schema | String | 테이블스키마 | |
uniqueConstraint | UniqueConstraint[] | 컬럼값 유니크 제약조건 | |
indexes | Index[] | 인덱스생성 |
1-3. JPA 담당 Repository 설계
- Mybatis의 DAO = JPA Repository와 연동 개념
- Spring Data JPA 인터페이스 구조
(T: 테이블-엔티티클래스, ID: Table Id 컬럼)Repository<T,ID> (가장 기본적인 인터페이스)
<–상속–
CrudRepository<T,ID> (C,R,U,D 작업위주로 진행)
<–상속–
PagingAndSortingRepository<T,ID> (위에 기능에 페이징, 정렬 기능 추가)
<–상속–
JpaRepository<T,ID> (Jpa에 특화된 기능 추가) - ex) BoardRepository.java
package com.reboot.repository;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import com.reboot.domain.Board;
//spring 2.7.4 버전 queryDsl 기본적으로 5.0.0 버전이 깔려 있으나 인식이 안되어 4.1.4로 설정하여 처리
public interface BoardRepository extends JpaRepository<Board, Long>{
//인터페이스 상속 구조
//Repository (기능없음) > CrudRepository (CRUD) > PagingAndSortingRepository (페이징 기능 추가) > JpaRepository (JPA에 특화된 기능 추가)
}
Comments