728x90
2.JPA 시작하기
- 목차
- 1.JPA 프로잭트 설정
- 2.JPA 애플리케이션 개발
1.JPA 프로잭트 설정
xml 설정
<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 와 h2를 설정한다
persistence
<?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>
- H2Dialect - h2의 방언
- H2Dialect 을 변경하면 오라클 , mysql , mariadb 등등을 사용할수 있다
- resources -> META-INF -> persistence.xml
2.JPA 애플리케이션 개발
Member
@Entity
@Table("Member")
public class Member {
@Id
@Column("id")
private Long id;
private String name;
}
- @Entity : 이 클래스를 테이블과 매핑한다고 JPA 에게 알린다
- @Id : 기본키
- @Table : 테이블명
- @Column : 필드를 컬럼에 매핑
Jpa 등록
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.setName("HelloA");
Member findMember = em.find(Member.class, 1L);
findMember.setName("Hello");
em.persist(member);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
- persist 를 이용해서 등록한다
Jpa 조회 및 수정
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 findMember = em.find(Member.class, 1L);
findMember.setName("Hello");
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
- find 를 이용해서 Member 를 조회한다
- setName("Hello") 에서 내용을 바꾸어 주면 jpa 에서 변경을 감지해서 Update 가 나간다
JPQL
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{
List<Member> result = em.createQuery("select m from Member m", Member.class)
.setFirstResult(1)
.setMaxResults(100)
.getResultList();
for (Member member : result) {
System.out.println("member.name = " + member.getName());
}
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
- createQuery 를 이용한다
- select m from Member m -> Member 를 m 에 매핑 모든값을 조회
- setFirstResult , setMaxResults 이용해서 페이징이 가능하다
- 테이블이 아닌 엔티티 객체를 대상으로 검색
정리
- EntityManagerFactory : 애플리케이션 전체에서 딱한번 생성하고 공유해서 사용
- xml 의 설정을 읽어서 jpa 를 동작시키기 위한 기반객체를 만든다
- jpa 구현체에 따라서는 데이터커네셕풀 생성 , 엔티티 매니저 팩토리 생성
- EntityManager
- 엔티티 데이터베이스에 등록/수정/삭제/조회를 한다
- 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용하면 안된다
- EntityTransaction
- jpa 는 트랙재션 안에서 동작해야 된다
- try/catch 이용해서 정상이면 commit 비정상은 rollback 한다
- JPQL : SQL 을 추상화한 JPQL 이라는 객체 지향 쿼리 언어 제공 (엔티티 객체)
참고
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
728x90
'Back-End > Spring Data' 카테고리의 다른 글
4.엔티티 매핑 (0) | 2021.01.07 |
---|---|
3.영속성관리 - 내부동작방식 (0) | 2021.01.05 |
1.JPA 소개 (0) | 2021.01.04 |
9.웹 계층 개발 2(주문) (0) | 2021.01.01 |
8.변경감지 와 병합 (0) | 2021.01.01 |