본 포스팅은 김영한 선생님의 자바 ORM 표준 JPA 프로그래밍 - 기본편를 듣고 배운 것을 정리하는 글입니다.
정확하게 JPA에 대해서 배우고 싶으시다면
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
위의 강의를 보시는 것을 추천드립니다.
1. 프로젝트 구성
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?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>JPA_Basic</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
</project>
|
cs |
resources.META-INF.persistence.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?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>
|
cs |
1.JPA
1)Java Persistance API
ORM 기술 표준
ORM -> Object-Relational Mapping
객체지향의 패러다임을 가지는 스프링에서 객체는 객체대로 설계하고 관계형 데이터베이스에 설계대로 매핑하기 위해 존재하는 중간 프레임워크
2)JPA를 사용하는 이유
-SQL 중심적인 개발에서 객체 중심으로 개발
-생산성 향상, 유지보수 용이 성능향상
-데이터 접근 추상화와 벤더 독립성 등
3) JPA 구동 방식
영속성(Persistence) 컨텍스트
->엔티티를 영구 저장하는 환경
EntityManager.perisst(entity)
-> 엔티티 매니저를 통해서 영속성 컨텍스트에 접근
엔티티의 생명주기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package hellojpa;
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) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try{
Member member = new Member();
member.setId("1L")
member.setUserName("memberA");
em.persist(member);
Member findMember = em.find(Member.class,"1L");
tx.commit();
}catch(Exception e){
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
|
cs |
1. EntityManagerFactory을 emf로 객체생성
2. emf 안에 EntityManager을 em으로 객체 생성
3. em 안에 Transaction을 tx로 객체 생성
4. 영속성 등록은 트랜잭션 단위로 등록 되므로 트랜잭션 시작 -> tx.begin()
5. Member 클래스에 id와 username을 setter메소드로 지정(1L, "memberA")
6. 엔티티매니저 안의 영속성에 member 객체를 등록
7. 아직 데이터베이스에 저장하기 전의 캐쉬 내에서 member 객체 조회 가능(em.find)
8. tx.commit()으로 데이터베이스에 저장
**flush() -> 영속성 내에 있는 캐쉬값을 데이터베이스에 즉시 반영
'프로그래밍 언어 > Spring' 카테고리의 다른 글
<Spring Boot> LMS 프로젝트8. JPA 엔티티 매핑 (0) | 2021.12.09 |
---|---|
<JPA> JPA 2. 엔티티 매핑 (0) | 2021.11.18 |
<Spring> 스프링 핵심원리 - 기본편 후기 (0) | 2021.11.17 |
<Spring>LMS프로젝트7. 학생 출결 로직 작성(5) 컴포넌트스캔과 자동 의존관계 주입 (0) | 2021.11.08 |
<IntelliJ>Git Hub 연동하기 (0) | 2021.11.03 |