공hannah부
자바 ORM 표준 JPA 프로그래밍 CH02 본문
메이븐과 사용 라이브러리 관리
메이븐
- 메이븐은 간단히 말해 라이브러리르 관리해주는 도구이다.
- pom.xml에 사용할 라이브러리를 적어주면 라이브러리를 자동으로 내려받아 관리해준다.
pom.xml
- <dependencies>에 사용할 라이브러리를 지정해 groupId + artifactId + version만 적어주면 라이브러리를 메이븐 공식 저장소에서 내려받아 추가해준다.
- 핵심 라이브러리: JPA, 하이버네이트, H2 데이터베이스
객체 매핑 시작
회원 테이블 만들기
CREATE TABLE MEMBER(
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INTEGER,
PRIMARY KEY(ID)
)
회원 클래스 만들기 + 어노테이션 추가
package jpabook.start;
import javax.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;
}
}
어노테이션
- @Entity: 해당 클래스를 테이블과 매핑한다고 JPA에게 알려줌.
- @Table: 엔티티 클래스에 매핑할 테이블 정보를 알려줌. 이 어노테이션을 생략하면 클래스 이름을 테이블 이름으로 매핑
- @Id: 엔티티 클래스의 필드를 테이블의 기본 키에 매핑. 이렇게 @Id가 사용된 필드를 식별자 필드라고 함.
- @Column: 필드를 컬럼에 매핑.
- 매핑 정보가 없는 필드: age필드와 같이 매핑 어노테이션을 생략하면 필드명을 사용해 컬럼명으로 매핑. (대소문자 구분X 가정)
애플리케이션 개발
엔티티 매니저 설정
- 엔티티 매니저 팩토리 생성
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
- persistence.xml의 설정 정보를 사용해 엔티티 매니저 팩도리를 생성해야한다. 이 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한번만 생성해야한다.
- 엔티티 매니저 생성
- EntityManager em = emf.createEntityManager();
- 엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다. 이를 사용해 엔티티를 데이터베이스에 등록/수정/삭제/조회 할 수 있다.
- 종료
- em.close();
- emf.close();
- 사용이 끝난 엔티티 매니저와 팩토리는 반드시 종료해야한다.
트랜잭션 관리
- JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야한다.
- 트랜잭션을 시작하려면 엔티티 매니저에서 트랜잭션 API를 받아와야한다.
- 트랜잭션 API를 사용해 비즈니스 로직이 정상 동작하면 트랜잭션을 커밋하고, 예외가 발생하면 롤백한다.
비즈니스 로직
- 회원 엔티티를 하나 생성한 후 엔티티 매니저를 통해 데이터베이스에 등록, 수정, 삭제, 조회한다.
- 등록
- em.persist(member);
- 엔티티 매니저의 persist() 메소드에 저장할 엔티티를 넘겨준다.
- 수정
- member.setAge(20);
- JPA는 어떤 엔티티가 변경되었는지 추적하는 기능을 갖추고 있기에 위처럼 엔티티의 값만 변경하면 된다.
- 삭제
- em.remove(member);
- 엔티티 매니저의 remove() 메소드에 삭제하려는 엔티티를 넘겨준다.
- 한 건 조회
- Member findMember = em.find(Member.class, id);
- find() 메소드는 조회할 엔티티 타입과 @Id로 데이터베이스 테이블의 기본 키와 매핑한 식별자 값으로 엔티티 하나를 조회하는 메소드다.
package jpabook.start;
import javax.persistence.*;
import java.util.List;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); //엔티티 매니저 팩토리 생성
EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성
EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득(트랜잭션 API)
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);
}
}
자바 ORM 표준 JPA 프로그래밍 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
'공부 > 백엔드' 카테고리의 다른 글
자바 ORM 표준 JPA 프로그래밍 CH03 (영속성 관리) (0) | 2023.06.26 |
---|---|
CI & CD (0) | 2023.06.02 |
EC2 서버에 프로젝트 배포하기 (0) | 2023.05.05 |
AWS에 데이터베이스 환경 만들기-AWS RDS (0) | 2023.05.05 |
AWS 서버 환경 만들기-AWS EC (0) | 2023.05.04 |