당우 일기장

JPA 시작하기 본문

JPA

JPA 시작하기

당우 2025. 4. 7. 20:44

기본 세팅 설정

build.gradle

 // https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core
    implementation group: 'org.hibernate.orm', name: 'hibernate-core', version: '6.6.10.Final'
    // https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api
    implementation group: 'jakarta.persistence', name: 'jakarta.persistence-api', version: '3.1.0'
    // https://mvnrepository.com/artifact/com.mysql/mysql-connector-j
    implementation("com.mysql:mysql-connector-j:8.3.0")

    // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
    implementation("ch.qos.logback:logback-classic:1.5.16")


    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'


    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'

 

META-INF

persistence.xml 

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.2">

    <!-- 엔티티 매니저 팩토리를 식별하기 위한 이름 설정 -->
    <persistence-unit name="jpa-lecture">

        <properties>
            <!-- 데이터 베이스 연결 정보 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="유저아이디"/>
            <property name="javax.persistence.jdbc.password" value="비밀번호"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/어쩌구"/>
            <!-- hibernate 설정 (실행 되는 sql의 생성) -->
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <!-- hibernate 설정 (실행 되는 sql 구문을 format 형태로 보여준다) -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>



    <persistence-unit name="jpa-lesson">
        <properties>
            <!-- 데이터 베이스 연결 정보 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value=""/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/"/>
            <property name="hibernate.hbm2ddl.auto" value="none"/>
            <!-- hibernate 설정 (실행 되는 sql 구문을 format 형태로 보여준다) -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>

</persistence>

logback.xml

<configuration>
    <!-- 모든 로깅 비활성화 -->
    <logger name="org.hibernate" level="OFF"/>
    <root level="OFF"/>
</configuration>

 

 

이건 TMI

데이터베이스 방언

1.JPA는 특정 데이터베이스에 종속되지않는다

2.각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 다름

    2-1 가변문자:mysql은 varchar, 오라클은 varchar2

    2-2 문자열을 자르는 함수 sql 표준은 substring() 오라클은 substr() 

    2-3 페이징: mysql은 limit 오라클은 rownum

방언: sql 펴준을 지키지않는 특정 데이터베이스만의 고유한 기능

 

 

 

JPA 의 구동방식

persistence 에서 시작

 

 

실습 - JPA 동작 확인

jpaMain 클래스 생성

JPA 동작 확인

 

Application의 기본 뼈대

package com.jpatest

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("엔티티 매니저 팩토리를 식별하기 위한 이름");
        EntityManager em = emf.createEntityManager();

        em.clear();
        emf.close();


    }
}

 

객체와 테이블을 생성하고 매핑하기

@Entity : JPA가 관리할 객체

@Id : 데이터베이스 PK와 매핑

 

 

 

jpa 연습용 데이터베이스를 하나 만들어주자

CREATE DATABASE jpatestdb;

use jpatestdb;
create table Member(
    id bigint not null,
    name varchar(255),
    primary key (id)
);
CREATE DATABASE jpatestdb;
use jpatestdb;
create table Member(
    id bigint not null,
    name varchar(255),
    primary key (id)
);

이렇게 하나씩 순차적으로 실행해주자

 

대충 jpatestdb 라는 데이터베이스를 만들어주고

member 라는 테이블을 만들고

id name  을 만들어주고 id를 pk로 만들어주었다

 

Member 뼈대

package com.hellojpa;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class Member {

    @Id
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

그리고 persistence.xml 에다가

<persistence-unit name="안알랴줌">
    <class>com.hellojpa.Member</class>
    <properties>

 

class 추가

 

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-lecture");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();


        Member member = new Member();
        member.setId(1L);
        member.setName("HelloA");


        tx.commit();

        em.persist(member);

        em.clear();

        emf.close();

그리고 main 에다가 트랜젝션과 member 변수 추가