Page History
Tip |
---|
JPA의 컨셉은 Java Persistence API 의 약자로 두가지 큰 목적을 가지고 있습니다.
JPA와 별개로 데이터베이스를 잘 활용하는 방법은 데이터베이스를 잘 이해하는것임으로 연관부분이 있을시 JPA의 특성과 같이 설명 진행 예정입니다. 설명을 위해, 축약된 코드로 진행되며, 풀소스는 아래에서 확인가능합니다. CodeLink : http://git.webnori.com/projects/WEBF/repos/spring_jpa/browse JPA 개념 추가설명 |
...
DDL(Data Definitison Language)의 테이블 객체의 생성(Create),변경(Alert),삭제(Drop)등을
수행하는 명령문이라고 보시면됩니다. JPA에서는 옵션이라고 단순하게 설명을 하였지만
개발 프로토타잎/반영 자동화등에 활용될수 있으나 어플리케이션에서 DDL을 정책없이
모두 허용하는것은 위험합니다.
데이터베이스를 개발,유지,운영하는 정책/권한/전략과 상관이 있는 중요한 옵션입니다.
추가 용어설명
- DML(Data Manipulation Language) : 스키마객체의 데이터를 Insert/Update/Select등을 할수 있는 명령어(표준화되어있어서 거의 공통)
- DCL(Data Control Language) : Commit,RollBack,SavePoint등을 할수 있는 명령어(DB종속적인 경우가 많음)
JPA는 DDL/DML/DCL 모두 할수 있는 구조로 설계되어 있습니다.
네이밍룰
...
JPA에서 class를 통해 테이블을 정의할때 몇가지 규칙이 있습니다.
...
각각의 DB에따라 약간식 틀린 SQL문을 방언이라고하며 , JPA에서는 특수한 DB를 사용했을시
방언지정을 통해 소스변경없이, JPA의 일괄적인 인터페이스내에서 작동되도록 지원합니다.
예를들면 MYSQL에서는 페이지처리를 위해서 Limit를 쓴다거나, Oracle에서는 Rownum을쓴다거나
하는 차이를 알필요없이 JPA가 제공하는 Pageable을 통해 공통처리가 된다는것입니다.
그럼에도 불구하고, JPA의 어떠한 기능인터페이스를 활용했을때 실제 호출하는 SQL문을 알아둘필요가
있습니다.
Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Database 방언(Dialect)방언이란 서로 다른 Database간의 SQL문법 차이를 말하며 JPA 구현체들은 이를 보정해 주기 위해 Dialect Class를 제공한다 이를 통해서 Database가 변경되어도 Dialect Class교체 만으로 코드 변경없이 문제를 해결 할 수 있게 된다. Hibernate 의 Dialect 리스트는 아래 와 같다.
|
Data Model(Entity) 생성
...
JPA영속성에서 객체를 유일하게 식별할수 있는 Id어노테이션은 필수입니다.
테이블의 기본키에 대응하는 키워드입니다.
Code Block | ||||||
---|---|---|---|---|---|---|
Code Block | ||||||
| ||||||
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; } } |
실제 DataBase에서는 위와같은 테이블이, 어플리케이션 시작시 자동 생성됩니다.
...