티스토리 뷰
1. 프로젝트 구성
2. pom.xml
더보기
<?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>jpaBasic</groupId>
<artifactId>ex1-hello-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<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>2.1.214</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
</project>
3. 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>
4. JpaMain 클래스
더보기
package hello.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){
// 1. Entity
// : DB의 테이블과 매칭이 되는 개념이다.
// : 여기에서 Entity는 Member이며, @Entity를 통해서 DB의 테이블에 있는 컬럼과 매칭되도록 만들었다.
// : 기본적으로 JPA는 모든 필드를 불러오도록 구현되어 있다.
// : 참고 - https://perfectacle.github.io/2018/01/14/jpa-entity-manager-factory/
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // (****)
// 2. EntityManager
// : Entity를 관리하는 역할을 수행하는 클래스이다.
// : EntityManager 내부에 영속성 컨텍스트( Persistence Context )라는 것을 두어 관리한다.
// : EntityManager는 스레드 간에서 공유되면 안된다.
// 3. Persistence Context ( 영속성 컨텍스트 )
// : 프로그램이 종료되기 전까지 엔티티를 영구히 저장하는 환경
// 4. EntityManagerFactory
// : EntityManager를 생산하는 찍어내는 공장
// : DB에서 하나만 생성이 된다. ( 하나만 생성해서 애플리케이션 전체에서 공유 )
EntityManager manager = emf.createEntityManager(); // (****)
// + 트랜잭션 생성 (****)
EntityTransaction tx = manager.getTransaction();
tx.begin();
try{
Member member = new Member();
member.setId(4L);
member.setName("HelloD");
// + 수정할 경우
// Member find = manager.find(Member.class, 1L); ( pk가 1L인 멤버를 찾아오게 된다. / 조회 )
// + 삭제할 경우
// manager.remove(Member.class, 1L);
// + JPA를 통해 엔티티를 가져올 경우에는 업데이트 쿼리를 생성하기에 따로 .persist를 하지 않아도 된다.
// + JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.
// List<Member> result = manager.createQuery("select m from Member as m", Member.class).getResultList();
// 5. JPQL
// : JPA를 사용하면 엔티티 객체를 중심으로 개발하게 된다.
// : 그렇게 되면 검색하는 쿼리에서 문제가 날 수 있는데,
// : 이를 JPQL을 사용하면 검색을 할 때에도 테이블이 아닌 엔티티 객체를 대상으로 검색한다.
// : JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
// : SQL과 문법과 유사하며, SELECT / FROM / WHERE / GROUP BY / HAVING / JOIN을 지원한다.
// : JPQL은 엔티티 객체를 대상으로 쿼리를 생산한다.
// : 반면 SQL은 데이터 베이스 테이블을 대상으로 쿼리를 만든다.
manager.persist(member);
// + .persist : 엔티티에 영구히 저장
// + 정상적으로 작동을 할 경우
tx.commit();
} catch (Exception e){
// + 예외가 발생할 경우에는 rollback을 실행한다.
tx.rollback();
} finally {
manager.close();
} // try - catch - finally
emf.close();
} // main
} // JpaMain
5. Member 클래스 ( Entity )
더보기
package hello.jpa;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "MEMBER")
// + @Table의 name 속성을 통해 DB 테이블을 지정할 수 있다.
// + 지정하지 않을 경우 클래스의 이름과 같은 테이블에 저장하려고 한다.
public class Member {
@Id
private Long id;
private String name;
public Long getId() {
return id;
} // getter
public void setId(Long id) {
this.id = id;
} // setter
public String getName() {
return name;
} // getter
public void setName(String name) {
this.name = name;
} // setter
} // end class
728x90
'[스터디] 김영한]' 카테고리의 다른 글
05. 데이터베이스 스키마 자동 생성 (0) | 2022.12.15 |
---|---|
04. 엔티티 매핑 ( 1 ) - 엔티티 매핑의 종류 (0) | 2022.12.14 |
03. 영속성 관리 (0) | 2022.11.30 |
01. JPA와 모던 자바 데이터 저장 기술 (0) | 2022.11.16 |
댓글