2 minute read

[JPA] 스프링 부트 JPA : 기본 설정

1. 스프링 부트 기본 JPA 설정 하기

1-1. JPA Spring boot 셋팅

  • 프로젝트 > Add Starter > JPA 체크 도커 이미지 02
  • 기타 연결 해야될 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에 특화된 기능 추가)
	
}

Categories:

Updated:

Comments