상세 컨텐츠

본문 제목

Spring JPA란

Spring/DB 설정

by Chan.94 2021. 10. 17. 09:28

본문

반응형

JPA

Java Persistence API (자바 ORM 기술에 대한 API 표준 명세)
한마디로 ORM을 사용하기 위한 인터페이스를 모아둔 것 이라고 볼 수 있으며, JAVA 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. Hibernate, OpenJPA 등이 JPA를 구현한 구현체 이다. 

※결국 인터페이스이기 때문에 JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 한다.

 

ORM

Object-Relational Mapping (객체와 관계형데이터베이스 매핑, 객체와 DB의 테이블이 매핑을 이루는 것)
객체가 테이블이 되도록 매핑 시켜주는 프레임워크 이며, SQL Query가 아닌 직관적인 코드(메서드)로서 데이터를 조작할 수 있다.

 

Hibernate

JPA를 사용하기 위해서 JPA를 구현한 ORM 프레임워크중 하나이다.

application.yml

jpa:
  database: mysql
  database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
  show-sql: true
  hibernate:
    ddl-auto: none
    naming:
      physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  properties:
    hibernate:
      format_sql: true

database : 사용하는 DB지정

database-platform : Dialect는 Hibernate가 다양한 DB에 각기다른 SQL문법을 처리하기 위해 존재한다.

(MySQL5Dialect, MySQL5InnoDBDialect, Oracle10gDialect, OracleDialect 등)

show-sql : SQL을 한줄로 보여준다.

format_sql : SQL을 보기 좋게 보여준다.

 

JPA 특징

1. 생산성이 뛰어나다.
- 테이블의 컬럼을 한개 추가하게되면 모델부터 XML까지 각각 추가를 해주어야했었다. (단순 작업이 줄어듬)
2. 복잡한 쿼리를 사용할 때에 불리하다.
- 쿼리를 작성하는 것이 더 가독성이 뛰어날 경우가 생긴다.

 

@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name="USER")
public class UserVO {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "user_no", updatable = false, nullable = false)
	private int userNo;
	@Column(name = "user_id", updatable = false, nullable = false)
	private String userId;
	@Column(name = "user_pw", updatable = false, nullable = false)
	private String userPw;
}

 

@Entity

JPA를 사용해서 테이블과 매핑할 클래스에는 @Entity를 붙인다. @Entity가 붙은 클래는 JPA가 관리하는 것으로 엔티티라 부른다.

name : JPA와 사용할 엔티티 이름을 지정, 사용하지 않을경우 클래스 이름이 적용

 

@Table

엔티티와 매핑할 테이블을 지정하고, 생략시 매핑한 엔티티 이름을 테이블이름으로 사용한다.

name : 매핑할 테이블 명

 

@Column

일반적으로 JAVA는 카멜표기법으로 DB는 언더스코어를 주로 사용한다. 이러한 차이를 줄이기 위해 name속성으로 매핑해준다.

 

 

Repository 인터페이스

JPA에서는 단순히 Repository 인터페이스를 생성한후 JpaRepository<Entity, 기본키 타입> 을 상속받으면 기본적인 CRUD가 자동으로 생성된다.

public interface UserJpaDAO extends JpaRepository<UserVO, Long>{
	UserVO findByUserId(String userId);										//USER_ID로 SELECT
	UserVO findByUserNo(int userNo);									//USER_NO로 SELECT
}

JpaRepository를 상속받으면 사용할 수 있는 주요 메소드

- save : 새로운 엔티티는 저장하고 이미 잇는 엔티티는 수정

- delete : 엔티티 하나를 삭제

- findAll : 모든 엔티티 조회

 

메소드 이름으로 쿼리생성

Spring Data JPA - Reference Documentaion(공식문서)

반응형

'Spring > DB 설정' 카테고리의 다른 글

SpringBoot logback 파일적재  (2) 2021.10.27
SpringBoot logback / log4jdbc 설정  (4) 2021.10.19
Spring AOP Transaction설정  (0) 2021.10.16
[DBCP] HikariCP  (8) 2021.10.12
[Spring Boot] MySQL - Mybatis JAVA config  (2) 2021.10.10

관련글 더보기

댓글 영역

>