2021.06.23 - [JPA] - [JPA] Eclipse로 JPA 프로젝트 생성하기
안녕하세요! 오늘은 JPA 프로젝트 생성하기에 이어 DB 설정 및 저장하는 방법을 소개해드리려고합니다~
JPA DB설정하기
META-INF - persistence.xml 열기
<!-- JPA를 쓸건데 이름을 뭐로 쓸건지 -->
<persistence-unit name="JPA">
<properties>
<!-- 필수 속성 -->
<!-- javax.로 시작하는건 구현체가 다양한데 hibernate 라이브러리 말고 다른 구현체의 라이브러리를 사용해도 적용가능 -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <!-- DB 정보 입력 -->
<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"/> <!-- 접근 URL -->
<!-- hibernate.로 시작하는건 hibernate 전용 옵션 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<!-- JPA는 특정 데이터베이스에 종속적이지 않음
Oracle이었다가 MySQL으로 변경하면 문법이 다르기때문에 DB를 변경하게되면 쿼리를 다 변경해주어야함.
그래서 JPA에게 나는 이 문법을 사용해 라고 알려주는 정보!
MySQL : MySQLDialect / Oracle : OracleDialect / H2 : H2Dialect -->
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true"/> <!-- DB 쿼리 console에 볼건지 말건지 -->
<property name="hibernate.format_sql" value="true"/> <!-- console에 쿼리 찍힐 때 예쁘게 갖춰주는 것 -->
<property name="hibernate.use_sql_comments" value="true"/> <!-- 이 쿼리는 사용자가 insert 했다는 식의 설명 코멘트 -->
<property name="hibernate.jdbc.batch_size" value="10"/> <!-- 버퍼링같은 개념으로 value 사이즈만큼 모아서 쿼리를 한번에 보내서 커밋하겠다는 것 -->
</properties>
</persistence-unit>
persistence.xml - properties 옵션
1. show_sql : 아래 처럼 로그 찍는 것
2. format_sql : 깔끔하게 표출
3. use_sql_comments : /* insert pa.Member */
JPA DB저장하기
EntityManagerFactory : 애플리케이션 로딩시점에 최초에만 생성하여 전체에서 공유
EntityManager : 일괄적인 트랜잭션 단위의 행위 별로 EntityManager 생성 / DB Connection 하나 받았다고 생각하면 됨
쓰레드간 공유하면 안되고 사용하고 반드시 버려야한다.
EntityTransaction : 트랜잭션 얻기
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 한다.
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JpaMain {
public static void main(String[] args) {
// 애플리케이션 로딩시점에 최초에만 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("HelloJPA"); // persistence.xml에 등록한 persistence-unit name과 일치
// 일괄적인 트랜잭션 단위의 행위 별로 EntityManager 생성 / DB Connection 하나 받았다고 생각하면 됨
EntityManager em = emf.createEntityManager();
// 트랙잭션 얻기
EntityTransaction tx = em.getTransaction();
// 트랜잭션 시작
tx.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
// JPA 저장
em.persist(member);
// 커밋
tx.commit();
} catch(Exception e) {
tx.rollback();
} finally {
// EntityManager 종료
em.close();
}
// 애플리케이션 종료
emf.close();
}
}
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity //JPA가 처음 로딩될 때 사용되는 애구나 인식하기 때문에 필수로 작성
// @Table(name = "테이블명")
public class Member {
@Id //pk가 무엇인지 알려주기 위해
private Long id;
// @Column(name="실제DB컬럼명이 다를경우")
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;
}
}
강의 열심히 따라서 실행했는데 자바 Class "~~~" is managed, but is not listed in the persistence.xml file 오류가 났다.. 찾아본 결과
persistence.xml에 class 추가
<persistence-unit name="HelloJPA">
<class>pa.Member</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
</persistence-unit>
추가 후 실행해보면
쿼리가 뜨고 DB를 확인해보면
짜잔~ 들어가있는 것을 확인할 수 있어요 : >
인강으로 공부하면서 작성하는 글로 잘못된 정보가 있을 수도 있습니다! 잘못된 정보가 있을 시 댓글달아주세요 : 0
'JPA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트 PersistenceContext (4) | 2021.06.29 |
---|---|
[JPA] JPQL / 페이징 처리 (0) | 2021.06.28 |
[JPA] DB 저장, 조회, 삭제, 수정하기 DB CRUD (4) | 2021.06.25 |
[JPA] Eclipse로 JPA 프로젝트 생성하기 (0) | 2021.06.23 |
JPA 란? (4) | 2021.06.22 |