Backend/JPA

[JPA/Java Persistence API] Entity 조회, 수정, 삽입, 삭제 - 기본편

냠냠:) 2021. 5. 9. 00:24

[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다]

 

 

개발 환경

 

JPA 설정

persistence.xml

  • /META-INF/persistence.xml 위치
  • persistence-unit name으로 이름 지정
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             version="2.2">
    <persistence-unit name="jpa-application">
        <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>
            <property name="hibernate.format_sql" value="true"></property>
            <property name="hibernate.use_sql_comments" value="true"></property>

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

hibernate.dialect

  • JPA는 특정 데이터베이스에 종속되지 않는다.
  • SQL 표준을 지키지 않는 특정 데이터베이스의 고유한 기능, 문법들을 JPA는 자동 지원한다.

자바 ORM 표준 JPA 프로그래밍 - 기본편 중

 

 

 

JPA 구동 방식

  • EntityManagerFactory는 하나의 EntityManager를 생성한다. 
  • EntityManager은 Entity를 저장, 수정, 삭제, 조회하는 등의 엔티티와 관련된 모든 일을 처리한다.

자바 ORM 표준 JPA 프로그래밍 - 기본편 중

 

JPA 동작 확인

Entity 생성

@Entity : JPA가 관리할 객체

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

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

H2 데이터베이스 내에 테이블 생성

 

데이터 삽입(persist)

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

	EntityTransaction tx = em.getTransaction();
	tx.begin();
	try {
		Member m = new Member();
		m.setId(100L);
		m.setName("춘식이");

		em.persist(m);			//persist = save

		tx.commit();
	}catch (Exception e) {
		tx.rollback();
	}

	em.close();
	emf.close();
}

console
H2 DataBase에 데이터가 들어간 것을 확인할 수 있음

 

 

 

데이터 조회(find)

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

	EntityTransaction tx = em.getTransaction();
	tx.begin();
	try {
		Member m = em.find(Member.class, 100L);

		System.out.println("m's Id : "+ m.getId());
		System.out.println("m's Name : "+ m.getName());

		tx.commit();
	}catch (Exception e) {
		tx.rollback();
	}

	em.close();
	emf.close();
}

console

 

 

데이터 수정

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

	EntityTransaction tx = em.getTransaction();
	tx.begin();
	try {
		Member m = em.find(Member.class, 100L);

		m.setName("수정된 춘식이");

		tx.commit();
	}catch (Exception e) {
		tx.rollback();
	}

	em.close();
	emf.close();
}

console
H2 Database에 값이 수정된 것을 볼 수 있음

 

 

데이터 삭제(remove)

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

	EntityTransaction tx = em.getTransaction();
	tx.begin();
	try {
		Member m = em.find(Member.class, 100L);
		em.remove(m);

		tx.commit();
	}catch (Exception e) {
		tx.rollback();
	}

	em.close();
	emf.close();
}

console
H2 Database에 값이 지워짐

 

 

주의사항

  • 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
  • 엔티티 매니저는 쓰레드간에 공유X
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행 (= 하나의 세션)

 

 

반응형