반응형
이 글은 인프런의 김영한 강사님 자바 ORM 표준 JPA 프로그래밍-기본 편 강의 내용을 바탕으로 작성되었습니다.
JPA 세팅하기
- 프로젝트 생성(메이븐)
- 라이브러리추가(pom.xml)
- persistence.xml추가(h2)
- 프로젝트 생성(인텔리제이 기준) : File -> new Projet -> Build system을 maven으로 선택
- 라이브러리 추가
<!-- 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>
pom.xml에 가서 해당 디펜던시를 추가해준다
- 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>
해당 정보들은 h2디비에 접속하기 위한 정보들을 나열하고 있다. 스프링에서는 yml 파일에 들어갈 정보라고 생각하면 쉽다.
JPA 시작하기
JPA를 활용하기 위한 세팅이 완료가 되었다면 메인 클래스를 만들어서 디비에 데이터를 넣어 보자. 먼저 엔티티를 생성해 준다
package hellojpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@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;
}
}
엔티티는 쉽게 생각해서 테이블 관련 오브젝트라고 생각하면 쉬울 듯하다.
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();
//jpa는 트랜직션이 매우 중요하다. 때문에 퀴리를 실행시키려면 트랜직션이 꼭 들어가야됨
EntityTransaction tx = em.getTransaction();
tx.begin();;
try{
//실질 적인 code가 들어가는 곳
Member member = new Member();
member.setId(2L);
member.setName("HelloB");
em.persist(member); //저장
tx.commit();
}catch (Exception e){
tx.rollback(); //문제가 생기면 롤백
}finally {
em.close();
}
emf.close();
}
}
다음은 메인 클래스이다 멤버 오브젝트에 id랑 name을 넣고 저장한 뒤 h2 디비를 확인해 보았다.
HelloA는 이미 기존에 내가 넣은 거고 B도 잘 들어가 있는지 확인이 가능했다. 만약 수정을 하고 싶다면 디비에서 해당 데이터를 찾은 이후에 persist가 아닌 set을 활용하여 객체를 수정해 주면 된다.
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();
//jpa는 트랜직션이 매우 중요하다. 때문에 퀴리를 실행시키려면 트랜직션이 꼭 들어가야됨
EntityTransaction tx = em.getTransaction();
tx.begin();;
try{
Member findMemember = em.find(Member.class, 1L); //객체를 먼저 찾음
findMemember.setName("HelloJPA"); //객체의 수정만으로도 디비에 데이터가 수정됨
tx.commit(); //디비 트랜젝션에서 커밋하기전에 객체의 데이터 값이 변경이 되었는지 체크함
}catch (Exception e){
tx.rollback(); //문제가 생기면 롤백
}finally {
em.close();
}
emf.close();
}
}
확인해 본 결과 시퀀스 1번의 데이터가 수정된 것을 확인할 수 있다. 만약 리스트 데이터나 조인 및 조건 데이터를 사용해서 데이터를 가져오려면 JPQL을 사용해야 한다
- JPQL은 엔티티 객체를 대상으로 쿼리
- SQL은 데이터 베이스 테이블을 대상으로 쿼리
try{
// 간단한 JPQL 사용법
List<Member> result = em.createQuery("select m from Member as m", Member.class)
.getResultList();
for(Member member: result){
System.out.println("member.name = " + member.getName());
}
tx.commit(); //디비 트랜젝션에서 커밋하기전에 객체의 데이터 값이 변경이 되었는지 체크함
}catch (Exception e){
tx.rollback(); //문제가 생기면 롤백
}finally {
em.close();
}
결국에는 SQL 쿼리문으로 작성을 해야 데이터를 불러올 수 있다.
반응형
'spring > JPA' 카테고리의 다른 글
[JPA] 고급매핑 (0) | 2023.12.11 |
---|---|
[JPA] 다양한 연관관계 매핑 (0) | 2023.12.08 |
[JPA] 연관관계 매핑 기초 (2) | 2023.12.07 |
[JPA] 엔티티 매핑 (1) | 2023.11.09 |
[JPA] JPA 영속성 관리 (0) | 2023.11.07 |