JPA

[JPA] DB 연결 설정 및 DB에 저장하기

솔솔 2021. 6. 24. 09:57
반응형

2021.06.23 - [JPA] - [JPA] Eclipse로 JPA 프로젝트 생성하기

 

[JPA] Eclipse로 JPA 프로젝트 생성하기

프로젝트 생성 [Dynamic Web Project] - Next 프로젝트 명 작성 후 Next build path 설정 후 Next 설정 후 Finish 프로젝트 우클릭 - properties - Project Facets - JPA 체크 Apply and Close 선택 [Config..

ddol.tistory.com

안녕하세요! 오늘은 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