Programming 프로그래밍/JPA

[JPA] JPA 프로젝트 구조, 설정하기

8효송8 2024. 5. 2. 16:01

프로젝트 구조

Maven이면 pom.xml, Gradle이면 build.gradle 사용.

myproject/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── myproject/
│   │   │           └── JpaMain.java
│   │   └── resources/
│   │       └── META-INF/
│   │           └── persistence.xml
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── myproject/
│       │           └── MyApplicationTest.java
│       └── resources/
└── pom.xml | build.gradle

 

프로젝트 설정하기

메이븐 pom.xml

- 메이븐 프로젝트의 설정 파일. 

- JPA를 사용하려면 JPA 구현체(여기서는 Hibernate)와 JDBC 드라이버를 의존성으로 추가

<?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">
	<!-- ... -->
	<properties>
		<java.version>17</java.version>
		<!-- 프로젝트 코드 인코딩 설정 -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	</properties>

	<dependencies>
		<!-- JPA, 하이버네이트 -->
		<dependency>
			<groupId>org.hibernate.orm</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>6.3.1.Final</version>
		</dependency>
		<!-- MariaDB JDBC Driver -->
		<dependency>
			<groupId>org.mariadb.jdbc</groupId>
			<artifactId>mariadb-java-client</artifactId>
			<version>3.1.4</version>
		</dependency>
		<!-- 로깅 -->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.4.12</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.20.0</version>
		</dependency>
	</dependencies>
	<!-- ... -->
</project>

 

persistence.xml 설정

- JPA 설정 파일. 데이터베이스 연결 정보와 엔티티 클래스를 설정한다.

- 사용하는 데이터베이스의 종류에 따라 <property name="javax.persistence.jdbc.driver" /> 의 value를 작성한다. (여기서는 mariadb 사용)

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

    <persistence-unit name="jpabook">
        <properties>
            <!-- 필수 속성 -->
            <property name="jakarta.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="[유저네임]"/>
            <property name="jakarta.persistence.jdbc.password" value="[비번]"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mariadb://localhost:[설정포트]/[db이름]"/>
            
            <!-- Hibernate properties -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDBDialect" />
            <!-- 옵션 -->
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <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>

 

프로젝트 빌드하기

프로젝트를 실행하기 전에 pom.xml에서 프로젝트를 빌드해준다.

pom.xml에서 우클릭 > Maven > Reload project 클릭

 

프로젝트 동작확인하기

엔티티 클래스를 작성한다.

import jakarta.persistence.*;  

@Entity
@Table(name="MEMBER")
public class Member {

    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME")
    private String username;

    private Integer age;

    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;
    }
}

 

 

 

메인 클래스를 실행해서 JPA가 잘 동작하는지 확인한다.

public class JpaMain {

    public static void main(String[] args) {

        //엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
        EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성
        EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득

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

    public 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("members.size=" + members.size());

        em.remove(member); //삭제

    }
}

 

콘솔에 다음처럼 출력되면 성공