메이븐 프로젝트 설정
웹이 필요하면 webapp 선택, 자바 결과값만 간단하게 확인할거면 quickstart 선택
나는 quickstart 선택
- quickstart
- webapp
메이븐 그룹 Id 와 Artifact Id , 버전 지정하기
* Artifact Id : 프로젝트 파일 명
아래의 오류가 난다면? Could not write metadata for '/'.
> 이클립스 workspace 폴더안에 .metadata 폴더를 삭제를 한다.
pom.xml 에서 JPA 하이버네이트와 H2 데이터베이스 라이브러리 넣기
- JPA 하이버네이트 추가 - 인터페이스 JPA 구현체를 갖고있는 hibernate
- H2 데이터베이스 추가 - DB접근할 수 있는 드라이버
라이브러리 추가할 때 버전 중요하다
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jpa-basic</groupId>
<artifactId>ex1-hello-jpa</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>ex1-hello-jpa</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
</dependencies>
</project>
먼저 Hibernate 버전
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
하이버네이트 5.3.10 버전을 쓰는 이유는 jpa 혼자 쓰면 버전은 크게 중요하지 않는데 스프링을 엮어서 실핼할 때 hibernate 버전도 맞춰서 사용하면된다.
스프링을 사용한다면? 내가 사용하는 스프링 버전에서 사용하는 하이버네이트 버전을 확인해보자
스프링부트에서 하이버네이트 버전 확인하는 법
스프링부트 Projects - Spring Boot 들어가서 내가 사용할 버전의 Reference Doc. 들어가보면
hibernate-entitymanager 을 보면 스프링부트에서 사용할 하이버네이트 버전이 나온다 (예시사진이라 버전이 안맞음)
버전에 맞춰 하이버네이트를 사용하면 된다
그리고 javax.persistence 에서는 jpa인터페이스가 모두 들어가있다.
hibernate는 jpa구현체를 갖고있다
인터페이스= jpa
인터페이스 구현체로 hibernate 라이브러리를 선택했는데 persistence에 들어가면 앞으로 사용할 jpa인터페이스가 모두 들어가있다는 것.
두번째로 H2 라이브러리 버전
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
h2 다운받을때 <version>2.1.214</version> 버전 맞춰서 다운받는걸 권장한다.
이제 JPA 설정해보자
JPA 설정법
1. src / main / java 에 META-INF 폴더 생성
2. META-INF 폴더안에 persistence.xml 파일을 만들어서 프로젝트에 넣는다.
persistence.xml 안에 코드 복붙하기
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<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 name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" /> -->
</properties>
</persistence-unit>
</persistence>
<property name="hibernate.hbm2ddl.auto" value="create" /> 에 주석처리를 해제해줘야 DB에 쿼리문이 날려서 값이 저장이됨.
JpaMain 클래스를 만들어서 Member 객체 생성하고 값 넣어보기
public class JpaMain {
public static void main(String[] args) {
//애플리케이션 로딩시점에 딱 하나만 만들어놔야한다
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
//상품을 장바구니에 담기같은 db 커넥션을 얻어서 쿼리를 줘서 종료되는 일련의 과정의 단위를 할때마다 EntityManager를 만들어줘야함
EntityManager em = emf.createEntityManager();
//jpa는 트랜잭션 안에서 작업해야한다
//쉽게 말해 DB 커넥션을 받아놓는다
EntityTransaction tx = em.getTransaction();
tx.begin(); //DB 트랜잭션 시작
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
//JPA저장
em.persist(member);
//커밋
tx.commit();
em.close();
emf.close();
}
}
실행하면 h2 데이터베이스에 저장이된걸 확인할 수 있다.
'공부' 카테고리의 다른 글
JPA (2) | JPA 구동방식 설명 (0) | 2023.09.20 |
---|---|
JPA (1) | 자바 컬렉션과 JPA의 등장배경, JPA 장점 (0) | 2023.09.08 |
클래스 멤버 (0) | 2023.07.20 |
추상 메소드와 인터페이스 | 다중상속 (0) | 2023.06.27 |
다형성 (0) | 2023.06.22 |