JPA

JPA 시작

2023. 4. 10. 16:18
목차
  1. H2 데이터 베이스 설치
  2. 프로젝트 구조
  3. 객체 매핑
  4. persistence.xml 설정
  5. 애플리케이션 개발

H2 데이터 베이스 설치

Archive Downloads (h2database.com)

 

Archive Downloads

 

www.h2database.com

 

압축 푼 폴더에서 bin/h2.bat를 실행한다.

 

브라우저에서 아래와 같은 창이 뜬다.

정보는 위와 같아야 한다.

 

 

프로젝트 구조

프로젝트 생성

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>jpastudy</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- h2DataBase -->
        <!-- version은 pc에 설치한 h2데이터베이스와 맞춰줘야함!! -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>

        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.15.Final</version>
        </dependency>
    </dependencies>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

</project>

 

객체 매핑

h2에 테이블 생성

create table MEMBER (
    ID VARCHAR(255) NOT NULL,
    NAME VARCHAR(255),
    AGE INTEGER,
    PRIMARY KEY (ID)
);

 

회원 클래스 생성

package jpabook.start;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity // 해당 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
@Table(name = "MEMBER") // 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
public class Member {
    @Id // 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
    @Column(name = "ID")    // 필드를 컬럼에 매핑한다.
    private String id;          //아이디
    @Column(name = "NAME")
    private String username;    //이름
    // 매핑 어노테이션이 없다면 필드명을 사용해서 컬럼명으로 매핑한다.
    private Integer age;        //나이

    //Getter, Setter
    public String getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

 

  • @Entity
    • 해당 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
    • @Entity가 사용된 클래스를 엔티티 클래스라고 한다.
  • @Table
    • 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
    • 생략하면 클래스 이름을 테이블 이름으로 매핑한다.
  • @Id
    • 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
    • @Id가 사용된 필드를 식별자 필드라 한다.
  • @Column
    • 필드를 컬럼에 매핑한다.
  • 매핑 정보가 없는 필드
    • 여기서는 age가 해당된다.
    • 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다.

 

persistence.xml 설정

설정 파일이 META-INF/persistence.xml 클래스 패스 경로에 있으면 별도의 설정 없이 JPA가 인식할 수 있다.

 

<?xml version="1.0" encoding="utf-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
    <persistence-unit name="jpastudy">
        <properties>

            <!-- 필수 속성 -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

            <!-- 옵션 -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
            <property name="hibernate.id.new_generator_mappings" value="true"/>

        </properties>
    </persistence-unit>
</persistence>

필수 속성의 마지막은 데이터베이스의 방언을 설정하는 것이다.

 

옵션

  • hibernate.show_sql : 하이버네이트가 실행한 SQL을 출력한다.
  • hibernate.format_sql : 하이버네이트가 실행한 SQL을 출력할 때 보기 쉽게 정렬한다.
  • hibernate.user_sql_comments : 쿼리를 출력할 때 주석도 함께 출력한다.
  • hibernate.id.new_generator_mapping : JPA 표준에 맞춘 새로운 키 생성 전략을 사용한다.

 

애플리케이션 개발

package jpabook.start;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        // 엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpastudy");

        // 엔티티 매니저 생성
        EntityManager em = emf.createEntityManager();

        // 트랜잭션 획득
        EntityTransaction tx = em.getTransaction(); // 트랜잭션 API
        try {
            tx.begin();     // 트랜잭션 시작
            logic(em);      // 비즈니스 로직 실행
            tx.commit();    // 트랜잭션 커밋
        } catch (Exception e) {
            tx.rollback();  // 트랜잭션 롤백
        } finally {
            em.close();     // 엔티티 매니저 종료
        }
        emf.close();;       // 엔티티 매니저 팩토리 종료
    }

    // 비즈니스 로직
    private static void logic(EntityManager em) {

        String id = "id1";
        Member member = new Member();
        member.setId(id);
        member.setUsername("지한");
        member.setAge(2);

        // 등록
        em.persist(member);

        // 수정
        member.setAge(20);

        // 한 건 조회
        Member findMember = em.find(Member.class, id);
        System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());

        // 목록 조회
        List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
        System.out.println("member.size=" + members.size());

        // 삭제
        em.remove(member);
    }
}

 

엔티티 매니저 팩토리 생성

JPA를 시작하려면 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.

 

엔티티 매니저 생성

JPA의 기능 대부분은 엔티티 매니저가 제공한다. 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다.

엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면  안 된다.

실행결과

 

'JPA' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2023.04.13
연관관계 매핑 기초  (0) 2023.04.12
엔티티 매핑  (0) 2023.04.11
  1. H2 데이터 베이스 설치
  2. 프로젝트 구조
  3. 객체 매핑
  4. persistence.xml 설정
  5. 애플리케이션 개발
'JPA' 카테고리의 다른 글
  • 다양한 연관관계 매핑
  • 연관관계 매핑 기초
  • 엔티티 매핑
ewok
ewok
ewok
기록장
ewok
전체
오늘
어제
  • 분류 전체보기
    • 웹개발 교육
      • HTML
      • CSS
      • JavaScript
      • Database
      • Java
      • jQuery
      • Ajax
      • Bootstrap
      • jsp
      • Spring
      • MyBatis
      • 프로젝트
    • JAVA
    • SpringBoot
      • 기초
      • AWS
      • 개인프로젝트
    • Spring Security
    • JPA
    • 테스트코드
    • Error
    • CS
      • 컴퓨터 구조
      • 이산수학
    • 알고리즘
      • 정리
      • Java
    • SQL
    • 자격증
      • SQLD
      • 정보처리기사
    • Git

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • merge commit
  • branch
  • org.springframework.beans.factory.UnsatisfiedDependencyException
  • GIT
  • 브랜치
  • sqld 합격
  • 버전 관리
  • 생성자
  • org.hibernate.tool.schema.spi.CommandAcceptanceException
  • this
  • git bash
  • base
  • SQLD
  • 노랭이
  • sqld 자격증

최근 댓글

최근 글

hELLO · Designed By 정상우.
ewok
JPA 시작
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.