H2 데이터베이스 설치와 실행 - 이미 설치됨
window의 경우 H2 데이터베이스 설치 후 cmd 창에서 다음 명령어 실행
cd C:\Program Files (x86)\H2\bin h2.bat
프로젝트 생성
pom.xml
- org.hibernate 버전: Spring Boot Reference Doc. 에서 확인
- h2.database 버전: 설치한 h2와 같은 버전
Spring Boot2.7.4
/ hibernate5.6.11.Final
/ h22.1.214
사용<?xml version="1.0" encoding="UTF-8"?> <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-SNAPSHOT</version> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.6.11.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency> </dependencies> </project>
JPA 설정하기 - persistence.xml
/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>
데이터베이스 방언
JPA - 특정 데이터베이스에 종속 X
방언 - SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능
hibernate.dialect 속성에 지정
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(); em.close(); emf.close(); } }
H2 데이터베이스 접속
url = jdbc:h2:tcp://localhost/~/test
Member 테이블 생성
create table Member ( id bigint not null, name varchar(255), primary key (id) );
Member 클래스 생성
@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; } }
회원 등록
EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = new Member(); member.setId(1L); member.setName("HelloA"); em.persist(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); }
JPA는 transaction 안에서 실행되어야 함
→ 실행시 DB에 등록됨 - JPA 자동으로 매핑해서 실행
회원 조회
Member findMember = em.find(Member.class, 1L);
회원 삭제
em.remove(findMember);
회원 수정 - 저장할 필요 없음
findMember.setName(”HelloJPA”);
자동으로 Update 쿼리 생성
주의!!!
JPQL - 객체 지향 쿼리 언어
JPQL로 전체 회원 검색
List<Member> result = em.createQuery(”select m from Member as m”, Member.class).getResultList();
JPQL은 테이블이 아닌 엔티티 객체를 대상으로 쿼리
SQL은 데이터베이스 테이블을 대상으로 쿼리