본문 바로가기

Spring/JPA

JPA 기초와 매핑

객체 매핑하기

@Entity : JPA 가 관리할 객체를 엔티티라 부른다

@Id : DB와 PK와 매핑 할 필드

@Entity
public class Member{
	@Id
	private Long id;
	private String name;
	...
}
create table Member(
	id bigint not null,
	name varchar(255),
	primary key (id)
)

실습을 위해서 db에 그냥 테이블 만든거야.

persistence.xml

-JPA 설정 파일 -/META-INF/persistence.xml 위치 -javax.persistence로 시작 : JPA 표준 속성 -hibernamte로 시작 : 하이버네이트 전용 속성

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.2">
    <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.id.new_generator_mappings" value="true"/>-->

            <property name="hibernate.hbm2ddl.auto" value="create" />
            <!--
            create: 기존테이블 삭제 후 다시 생성 (DROP+CREATE)- 운영DB xx, 웬만하면 개발도 xx
            createㄱ-drop: create와 같으나 종료시점에 테이블 drop - 운영DB xx, 웬만하면 개발도 xx
            update: 변경분만 반영 - 운영DB xx, 웬만하면 개발도 xx
            validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
            none: 사용하지 않음
            local에서 사용하기에 좋겠다.
            -->
        </properties>
    </persistence-unit>
</persistence>

데이터베이스 방언

dialect: 방언

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

이게 왜 있냐? JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 하지만 각각의 DB에서 제공하는 SQL 문법과 함수는 조금씩 다르다... 오라클이 안 놓아줌... 뭐라도 걸려있어야? 돈 내고 자기 꺼 쓰지. 다른 곳에 못 가ㅜㅜ

차이 예) -MySQL은 VARCHAR, ORACLE은 VARCHAR2 -문자열 자르기 MYSQL은 SUBSTRING(), ORACLE SUBSTR(). -페이징 MySQL LIMIT, Oracle은 ROWNUM MSSQL은 더 심함...

방언 : SQL 표준을 지키지 않거나 특정 DB만의 고유한 기능

MySQLDialect, OracleDialect, H2Dialect 등

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>

DB 바꿔라! 비용!! 쿼리문 바꾸려면... 흐엥ㅜ0ㅜ JPA가 방언 지원해줌 그냥 property만 바꿔주면 됨

하이버네이트 45가지 언어 지원

해당 포스팅은 T아카데미에서 진행한 김영한 강사님의 JPA 유튜브 강의를 듣고 정리한 것입니다 : ) https://www.youtube.com/watch?v=WfrSN9Z7MiA&list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U

반응형

'Spring > JPA' 카테고리의 다른 글

JPA 필드와 칼럼 매핑  (0) 2021.04.11
JPA persistence.xml과 라이브러리 설정  (0) 2021.04.11
JPA 기초와 매핑 : 실습  (0) 2021.04.11
JPA에 대해서  (0) 2021.04.11
JPA, 객체지향과 RDB  (0) 2021.04.11