<aside> ❗

스프링 홈페이지에서 Spring-boot에 맞는 라이브러리 버전을 명시해놨는데 찾아서 넣으면 됨

</aside>

<aside> ❗

<?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="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/> 
            <property name="jakarta.persistence.jdbc.user" value="sa"/>
            <property name="jakarta.persistence.jdbc.password" value=""/>
            // 접근 URL - JDBC URL과 동일해야 함 
            <property name="jakarta.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> 
            // 어떤 방언을 쓰는지 지정해주는 것 -> 그래야 JPA가 알아서 방언을 해석해서 쓴다. 
            // hibernate 전용 옵션
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
						
						// Start 다른 라이브러리 사용 시 모두 바꿔 줘야 함 
            <!-- 옵션 -->
            <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" />
            // End 다른 라이브러리 사용 시 모두 바꿔 줘야 함 
        </properties>
    </persistence-unit>

</persistence>

JPA 설정하기 - persistence.xml

<aside> ❗

데이터베이스 방언

image.png

!!!! [hibernate.dialect 속성에 지정 ]

하이버네이트는 40가지 이상의 데이터베이스 방언 지원

</aside>

<aside> ❗

Hello JPA - 애플리케이션 개발

JPA 구동 방식

image.png

public static void main(String[] args( {
	EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
  EntityManager em = emf.createEntityManager();
  
  // 실제 애플리케이션 실행이 끝나면 EntityManagerFactory를 닫아줘야 한다. 
  em.close();
  emf.close();
}

</aside>

<aside> ❗

객체와 테이블 생성하고 매핑하기

@Entity - JPA가 관리할 객체

@Id - 데이터베이스 PK와 매핑

@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;
    }
}

****** 매우 중요 ******

[회원 등록]

public static void main(String[] args) {

  EntityManagerFactory emf = 
     Persistence.createEntityManagerFactory("hello");

  // 데이터베이스 커넥션 하나 받았다고 생각하면 편하다.
  EntityManager em = emf.createEntityManager();
  //code

	// 트랜잭션 제어에 필요한 EntityTransaction 객체 반환
  EntityTransaction ts = em.getTransaction();
  
	// 트랜잭션 시작 
  ts.begin();
  
  try {
	  Member member = new Member();
	  member.setId(1L);
	  member.setName("HelloA");
	  
	  em.persist(member);
	  
	  // 트랜잭션 종료 
	  ts.commit()
  
  } catch(Exception e) {
	  ts.rollback();  
  } finally {
		// 반드시 수행해줘야 함 
	  em.close();
  }
  
  emf.close();
}

[회원 수정]

public static void main(String[] args) {

  EntityManagerFactory emf = 
     Persistence.createEntityManagerFactory("hello");

  // 데이터베이스 커넥션 하나 받았다고 생각하면 편하다.
  EntityManager em = emf.createEntityManager();
  //code

	// 트랜잭션 제어에 필요한 EntityTransaction 객체 반환
  EntityTransaction ts = em.getTransaction();
  
	// 트랜잭션 시작 
  ts.begin();
  
  try {
		Member findMember = em.find(Member.class, 1L);
		
		// 객체값 변경 
	  findMember.setName("HelloJPA");
	  
	  // 값 변경을 감지하고 자동으로 UPDATE SQL 실행 
	  // 트랜잭션 종료 
	  ts.commit()
  
  } catch(Exception e) {
	  ts.rollback();  
  } finally {
		// 반드시 수행해줘야 함 
	  em.close();
  }
  
  em.close();
  emf.close();
}

[회원 삭제]

public static void main(String[] args) {

  EntityManagerFactory emf = 
     Persistence.createEntityManagerFactory("hello");

  // 데이터베이스 커넥션 하나 받았다고 생각하면 편하다.
  EntityManager em = emf.createEntityManager();
  //code

	// 트랜잭션 제어에 필요한 EntityTransaction 객체 반환
  EntityTransaction ts = em.getTransaction();
  
	// 트랜잭션 시작 
  ts.begin();
  
  try {
		Member findMember = em.find(Member.class, 1L);
		
		// find로 찾은 객체를 넣어주면 된다. 
		em.remove(findMember);
		
	  ts.commit()
  
  } catch(Exception e) {
	  ts.rollback();  
  } finally {
		// 반드시 수행해줘야 함 
	  em.close();
  }
  
  em.close();
  emf.close();
}

<aside> ❗

JPQL 소개

<aside> ❗

JPQL 실습

List<Member> selectMFromMember 
    = em.createQuery("SELECT m FROM Member as m", Member.class)
        .getResultList();

for (Member member : selectMFromMember) {
	System.out.println("member = " + member.getName());
}

<aside> ❗

JPQL