[22년도 하계 모각코]Spring Boot hibernate 버전 선택 방법

Kyunghwan Ko·2022년 7월 22일
0

22년도 하계 모각코

목록 보기
1/13

JPA 버전 선택방법

내가 사용할 Spring Boot의 Ref-Doc 중 Dependency version을 보면

위와같이 권장하는 hibernate 버전을 명시해준다. 이거에 맞게 hibernate를 사용하면 된다.

JPA 사용환경 세팅

Maven으로 진행

인텔리J에서 File → Project 생성 → Maven 선택

GroupId: jpa-basic
Artificatid: ex1-hello-jpa → 빌드하면 나오는 이름
Version: 1.0.0
-----------------------
Project name: ex1-hello-jpa
Project location: ~/study/ex1-hello-jpa
---------------------------------

porm.xml 에 아래의 dep을 추가한다.

<dependencies> 
 <!-- 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>1.4.199</version> 
 </dependency> 
 </dependencies>

JPA는 인터페이스의 모음이다. 그 중 인터페이스의 구현체로 Hibernate를 선택했다.

그렇기 때문에 Hibernate가 JPA 인터페이스를 가지고 있다.

<artifactId>hibernate-entitymanager</artifactId> 을 쓰면 위의 내용이 알아서 된다.

<version>1.4.199</version>h2 데이터베이스를 웹상에서 다운로드 받았던 버전이랑 일치시켜줘야한다.

select H2VERSION() from DUAL;
을 통해 알 수 있다.

JPA 설정하기 - persistence.xml

JAVA처럼 hello world 바로 띄울 수 있는게 아니라 몇가지 추가적인 설정이 필요하다

파일을 복붙하면 되는데 이때 경로가 매우 중요하다

src/main/resources/META-INF/persistence.xml으로 경로를 잡아준다.

<?xml version="1.0" encoding="UTF-8"?> 
<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="javax.persistence.jdbc.driver" value="org.h2.Driver"/>을 보면 어떤 DB를 쓸지 명시해주는데, 오라클DB 쓸거면 value에 오라클DB 넣어주면 된다.

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
[데이터베이스 방언] → JPA는 특정 DB에 종속적x → 프로젝트 중간에 DB 다른거로 바꿔도 ok

방언 == 사투리 따라서 DB마다 같은뜻인대 다릏게 SQL작성해야하는 것이있다.

그중 페이징이 일일이 맞춰줘야되서 까다롭다.

내가 H2라는 사투리를 쓸꺼야 명시하면 JPA가 알아서 번역해준다.

• H2 : org.hibernate.dialect.H2Dialect 
• Oracle 10g : org.hibernate.dialect.Oracle10gDialect 
• MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

javax 란?

JPA의 구현체로 Hibernate말고 2가지가 더 있는대, javax로 하면 다른거로 바꿔도 그대로 적용가능o

Hello JPA 애플리케이션 개발

  1. main/java밑에 hellojpa 라는 패키지 만들고 그 밑에 JPAMain이라는 클래스 생성.
package hellojpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
				// DB-CRUD code작성
        em.close();
        emf.close();

    }
}

이제 DB-CRUD하기 전에 테이블을 생성해 놓자

h2 데이터베이스 console 열어서 로그인 할때 localhost:8082 접속 후

<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>

에 있는 url(value 값)에 맞게

이때

위와 같은 에러가 뜬다면,

C://User/kyung 밑에 test.mv.db 파일을 생성한다(.txt 파일 생성 후 파일명 바꾸자)

이후 연결을 통해 SQL언어 작성 가능하다

create  table Member (
	id bigint not null,
	name varchar(255),
	primary key (id)
);

Member 라는 테이블을 생성한다

DB에 생성했으니까 JPA에서도 생성해보자

src/main/java/hellojpa/Member라는 클래스 만들자

이후 DB와 동일하게 매핑되는 필드를 추가하

@Entity 를 꼭 넣어주어여 한다. 왜냐하면 이걸 넣어줘야 JPA가 “아 이놈은 내가 관리해야하는 놈이구나”라고 인지할 수 있다.

그리고 필드를 생성후 어떤 것이 PK인지 JPA한테 알려줘야하니까 @Id 도 써줘야한다.

이후 아래 빈칸에서 Generate → Getter and Setter 해서 각 필드에 따른 getter/setter생성한다.

package hellojpa;

import javax.persistence.Entity;
import javax.persistence.Id;

@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;
    }
}
profile
부족한 부분을 인지하는 것부터가 배움의 시작이다.

0개의 댓글