겉바속촉
JPA. Hello JPA 본문
728x90
반응형
목표 : 애플리케이션 개발
테이블 생성 : Member 테이블
create table Member (
id bigint not null,
name varchar(255),
primary key(id)
);
1. 회원등록 : 데이터 넣어주기
<JpaMain.java>
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Member member = new Member();
member.setId(1L);
member.setName("HELLO A");
em.persist(member);
tx.commit();
em.close();
emf.close();
}
}
<Member.java>
@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;
}
}
실행했더니 다음과 같은 에러 발생....
INFO: HHH000204: Processing PersistenceUnitInfo
INFO: HHH000412: Hibernate Core {5.3.10.Final}
INFO: HHH000206: hibernate.properties not found
구글링하다가 다음과 같은 내용을 봐버림:)
JDK11 부터 Java EE 모듈이 제거되었다.
JDK11 이상 버전을 사용하는 경우 JAXB 라이브러리를 꼭 추가해줘야한다.
라는 것을 보고
pom.xml에다가 dependency를 추가해줬음
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
다시 빌드 후 돌려보니 다음과 같이 쿼리문이 제대로 출력되는 것을 확인할 수 있음
db에서 데이터 확인
2. 회원 조회 : 데이터 조회
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member findMember = em.find(Member.class, 1L);
System.out.println("findMember.id = " + findMember.getId());
System.out.println("findMember.name = " + findMember.getName());
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
출력문
3. 회원 삭제 : 데이터 삭제
그냥 다음과 같이 찾아준 값을 지워주면 ok
try {
Member findMember = em.find(Member.class, 1L);
em.remove(findMember);
tx.commit();
}
3. 회원 수정 : 데이터 업데이트
DB 조회로 확인해보니 id가 1인 값의 name이 정말로 HelloJPA로 바뀌어있다.
신기한 점은
JAVA객체에서 값만 바꿨을 뿐인데
왜?
DB의 값이 바꼈을까
JPA는 트랜젝션을 커밋하는 시점에 값이 바꼈는지 유무를 다 체크한다고 한다
즉, 체크하여 값이 바뀐 걸 알아챘다면
UPDATE 쿼리를 만들어버린다는 것.......OMG
***중요한 점***
Entity Manager Factory는 하나만 생성해서 애플리케이션 전체에서 공유함.
Entity Manager는 스레드 간 공유가되면 절대 nonono.
JPA의 모든 데이터 변경은 트랜젝션 안에서 실행되는 것.
728x90
반응형
'IT 일기 (상반기) > JPA' 카테고리의 다른 글
JPA. 엔티티 매핑 1. 객체와 테이블 매핑 (0) | 2023.03.23 |
---|---|
JPA. 프로젝트 생성 (0) | 2023.03.22 |
JPA. JPA란 (0) | 2023.03.22 |