FrameWorks/JPA

JPA 세팅 및 기초

ABCD 2023. 8. 24.

세팅 및 기초

pom.xml

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>${hibernate.version}</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-hikaricp</artifactId>
  <version>${hibernate.version}</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.27</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.6</version>
</dependency>

persistance.xml

  • 해당 파일은 main/resources/META-INF에 생성해준다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<!-- 영속 단위(영속성 관리 단위)이름 -->
  <persistence-unit name="jpabegin" transaction-type="RESOURCE_LOCAL">
    <!-- 맵핑 클래스 -->
    <class>study.jpa.jpa01.User</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <!-- 필수 속성(DB연결 설정) -->
      <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
      <property name="jakarta.persistence.jdbc.user" value="jpauser"/>
      <property name="jakarta.persistence.jdbc.password" value="jpapass"/>
      <!-- Docer 이용시에 해당 컨테이너 포트를 직접 확인하고 host와 port를 작성 -->
      <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://0.0.0.0:3306/jpabegin?characterEncoding=UTF-8"/>

      <!-- 하이버네이트 사용 시 MySQL 문법을 사용 가능하도록 변경.-->
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
      <!-- 커넥션 Pool 설정 -->
      <property name="hibernate.hikari.poolName" value="poll"/>
      <property name="hibernate.hikari.maximumPoolSize" value="10"/>
      <property name="hibernate.hikari.minimumIdle" value="10"/>
      <property name="hibernate.hikari.connctionTimeout" value="1000"/>
    </properties>
  </persistence-unit>
</persistence>

기본기 사용

User.java

@Entity //DB 테이블과 맵핑 대상
@Table(name = "user") //user 테이블과 맵핑
public class User {
    @Id //식별자에 대응(변수명과 칼럼의 이름이 같으면 다음과 같이 맵핑이 가능)
    private String email; //email 칼럼과 맵핑
    private String name; //name 칼럼과 맵핑

    @Column(name = "create_date") //create_date 칼럼과 맵핑(변수명과 칼럼의 이름이 다르면 해당 칼럼을 명시해서 사용 가능)
    private LocalDateTime createDate;

    public User(String mail, String user, LocalDateTime now) {
        this.email = mail;
        this.name = user;
        this.createDate = now;
    }

    public User() {
    }
}

UserSaveMain.java

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import study.jpa.jpa01.User;

import java.time.LocalDateTime;

public class UserSaveMain {
    public static void main(String[] args){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabegin");
        EntityManager entityManager = emf.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        try {
            transaction.begin();
            User user = new User("user@user.com", "user", LocalDateTime.now());
            entityManager.persist(user); //데이터를 Inser할 때 사용한다.
            transaction.commit();
        } catch (Exception e){
            e.printStackTrace();
            transaction.rollback();
        }finally {
            entityManager.close();
        }
        emf.close();
    }
}

UserGetMain.java

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import study.jpa.jpa01.User;

public class UserGetMain {
    public static void main(String[] args){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabegin");
        EntityManager entityManager = emf.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        try {
            transaction.begin();
            User user = entityManager.find(User.class, "user@user.com");
            if(user == null){
                System.out.println("User 없음");
            } else {
                System.out.printf("User 있음, email=%s, name=%s, createTime=%s\n", user.getEmail(), user.getName(), user.getCreateDate());
            }
            transaction.commit();
        } catch (Exception e){
            e.printStackTrace();
            transaction.rollback();
        }finally {
            entityManager.close();
        }
        emf.close();
    }
}

UserUpdateMain.java

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import study.jpa.jpa01.User;

public class UserUpdateMain {
    public static void main(String[] args){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabegin");
        EntityManager entityManager = emf.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        try {
            transaction.begin();
            User user = entityManager.find(User.class, "user@user.com");
            if(user == null){
                System.out.println("User 없음");
            } else {
                String newName = "이름" + (System.currentTimeMillis() % 100);
                user.setName(newName);
            }
            transaction.commit();
        } catch (Exception e){
            e.printStackTrace();
            transaction.rollback();
        }finally {
            entityManager.close();
        }
        emf.close();
    }
}
728x90
반응형

'FrameWorks > JPA' 카테고리의 다른 글

JPA Entity 단위 기본 CRUD처리  (0) 2023.08.26
JPA 기본 구조 & 영속성 컨텍스트  (0) 2023.08.24

댓글

💲 추천 글