Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Tip

JPA의 컨셉은 Java Persistence API 의 약자로 데이터 베이스에 존재하는 모델을

자바객체로 맵핑하는데 목적이 있습니다. DB는 종속적이지 않게 여러가지 DB 선택이가능하며

여기서는 MYSQL을 통해 실습이 진행됩니다.


설명을 위해, 축약된 코드로 설명을 하였으며, 풀소스는 아래에서 확인가능합니다.

CodeLink : http://git.webnori.com/projects/WEBF/repos/spring_jpa/browse

JPA 개념 추가설명 : http://blog.woniper.net/255


Table of Contents

접속 DB 설정

No Format
# application.properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/spring
spring.datasource.username=test
spring.datasource.password=test1234

spring.jpa.hibernate.ddl-auto 옵션

  • none: 테이블 구조 변경에 관여하지 않지않기때문에, DB 스키마와 JPA 모델을 맞추어놓아야합니다.
  • update: JPA에서 정의한 데이터모델과,  데이터베이스의 스키마 변경이 있을때 반영됩니다. 

  • create: 매번 테이블을 생성하지만, 어플리케이션이 닫힐때 드롭하지 않습니다.

  • create-drop: 매번 테이블을 생성하고, 세션이 닫힐때 자동으로 테이블을 드롭합니다.


네이밍룰

JPA에서 class를 통해 테이블을 정의할때 몇가지 규칙이 있습니다.

항목DBJPA객체설명
Table(Class)sample_tableSampleTable헝가리 표기법을따름
Field(member)samplenamesampleName카멜표기법을 따름




db가 설치된 os에따라 대소문자를 구분하는 경우가 있기때문에

...

  • @Table(name=”SAMPLE_TABLE”)
  • @Column(name = “COLUMN_NAME”,nullable=false) 

전역 네이밍룰을 변경하고싶으면

application.properties:

  • spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.EJB3NamingStrategy
  • spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

접속 DB 설정

...

  • @Column(name = “COLUMN_NAME”,nullable=false) 


전역 네이밍룰을 변경하고싶으면

application.properties:


  • spring.jpa.hibernate.

...

  • naming.strategy=org.hibernate.cfg.EJB3NamingStrategy
  • spring.jpa.hibernate.

...

  • none: 테이블 구조 변경에 관여하지 않지않기때문에, DB 스키마와 JPA 모델을 맞추어놓아야합니다.
  • update: JPA에서 정의한 데이터모델과,  데이터베이스의 스키마 변경이 있을때 반영됩니다. 

  • create: 매번 테이블을 생성하지만, 어플리케이션이 닫힐때 드롭하지 않습니다.

  • create-drop: 매번 테이블을 생성하고, 세션이 닫힐때 자동으로 테이블을 드롭합니다.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl


Data Model(Entity) 생성

Code Block
languagejava
themeEmacs
titleUser Entity
package com.psmon.springdb;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity // This tells Hibernate to make a table out of this class
public class User {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;
	
	private String name;
	
	private String email;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}

...