진짜 개발자
본문 바로가기

FrameWork/Spring JPA

JPA - JPA 설정 (H2 설정)

728x90
JPA 공부 1

자바 ORM 표준 JPA프로그래밍이란 책을 보고 공부를 위해 작성한 글입니다. 이번 포스팅에서는 JPA, H2 설정을 진행하겠습니다.

 

1. 환경

IDE

eclipse

JAVA

1.8

DB

h2, JPA

Build Tool

Maven

 

 

 

2. 프로젝트 생성


Spring MVC 프로젝트를 생성합니다.

 

 

 

3. Maven 의존성 설정

의존성 설정을 위해 pom.xml 을 편집합니다.

 

<dependencies> 태그 안에 위의 의존성을 추가합니다.

 

 

 

4. H2 DB 설정

h2 db는 초경량의 db로 인메모리 db도 지원하며 웹 콘솔에서도 사용가능한 db입니다. 테스트 환경에 아주 적합합니다.

 

http://www.h2database.com/html/download.html에서 platform-independent Zip를 설치합니다.

 

압출을 풀고 위의 경로에서 h2.bat을 실행하면 h2를 서버모드로 실행할 수 있습니다.(Window 기준) linux의 경우 sh를 실행합니다.

 

웹을 열고 http://localhost:8082 로 접속하면 위와 같이 h2에 연결됩니다. 위 그림과 같이 설정하고 연결을 누르면 연결이 됩니다.

 

 

 

5. Persistence.xml 설정

JPA를 이용하기 위해서는 필요한 설정정보가 담긴 xml 설정 파일을 생성 해야 합니다. META-INF/persistence.xml 의 클래스패스 경로에 존재하면 자동으로 JPA가 인식을 합니다.

 

persistence.xml에 위와 같이 입력합니다. <persistence-unit name="jpabook">EntityManagerFactory를 생성할 때 영속성 유닛을 지정할 이름으로 사용됩니다.

 

 

6. JPA 사용

6.1 MemberTable 생성

우선 웹 어플리케이션에서 사용할 Member Table을 위와같이 생성합니다.

 

 

6.2 MemberEntity 생성

그 후 Member table과 mapping될 MemberEntity Class를 생성합니다. 몇몇의 어노테이션이 보입니다 간단히 살펴보겠습니다.

@Entity

해당 클래스가 테이블과 매핑될 entity Class임을 JPA에게 알려줍니다.

@Table

entity class에 매핑할 table을 지정하는 속성입니다. 이 속성을 생략한다면 entity class를 카멜케이스로 한것을 매핑하게 됩니다. 우리는 Member Table을 생성하였고, 그와 매핑될 Entity Class의 이름은 MemberEntity이므로 이 속성이 필요합니다.

@Id

해당 어노테이션이 부여된 필드를 테이블의 primary key와 매핑되도록 합니다.

@Column

필드를 table의 column과 매핑합니다. 생략한다면 필드의 이름을 그대로 table의 column의 이름과 매핑합니다. userName의 경우 table에서는 name이라는 이름을 사용하므로 별도로 name 속성을 주어 매핑했습니다. 또한 이 어노테이션을 통해 필드에 별도의 제약을 줄 수도 있습니다.

 

 

6.3 Member entity 저장 Controller 생성

사용자로 부터 / 요청을 받게 될때 Member Entity를 저장하도록 하는 코드입니다.

 

saveMember()

saveMember() 코드에서는 아래와 같은 일을 처리합니다.

첫번째로 EntityManagerFactory를 생성하며 이때 Persistence의 createEntityManagerFactory() 메소드를 사용합니다. 또한 메소드의 인자로 아까 생성한 persitence-unit의 고유이름을 전달합니다.

두번째로 방금 생성한 EntityManagerFactory를 통해 EntityManager를 생성합니다.

세번째로 JPA를 이용하기 위한 Transaction 객체를 생성합니다. JPA에서는 Transaction없이 데이터를 변경한다면 예외를 발생시키게 됩니다.

마지막으로 transaction을 시작하고 logic()을 호출한 뒤 commit()합니다.

 

logic(EntityManager)

logic에서는 JPA를 이용하여 MemberEntity를 저장하고, 검색하여 콘솔에 출력을 합니다.

 

 

 

7. 확인

만든 Controller로 요청을 보내기 위해 위의 경로로 요청을 해보겠습니다.

 

콘솔에 성공적으로 만들었던 entity의 정보가 출력이 됩니다. DB를 확인해 보겠습니다.

 

성공적으로 레코드가 저장된것을 볼 수 있습니다.