kok202
JPA (기초 : 설정, CRUD)

2019. 3. 16. 21:47[정리] 기능별 개념 정리/JPA

persistence.xml

JPA의 설정을 관리하는 파일

Spring boot에서는 application.properties 또는 application.yml 으로 관리한다.


 H2와 JPA를 연결하는 예시

 javax.persistence.jdb.driver = org.h2.Driver

 javax.persistence.jdb.url= jdbc:h2:tcp://localhost/~/test

 javax.persistence.jdb.user= 

 javax.persistence.jdb.password = 

 hibernate.dialect = org.hibernate.dialect.H2Dialect


 hibernate.show_sql = true

 hibernate.format_sql = true

 hibernate.use_sql_comments = true

 hibernate.id.new_generator_mappings = true

 hibernate.hbm2ddl.auto = create-drop // 데이터 베이스 DDL 자동 생성하기 * 테스트할 때만 사용할 것






JPA를 사용하여 객체 CRUD

 @Entity

 public class Member {

@Id

private long id;

private String name;

private String age;


// ... getter setter는 생략

 }


 Create

 public class Main{

 public static void main(String[] args){

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistent.xml에 등록된 name");

EntityManager em = emf.createEntityManager();

EntityTransaction tx = em.getTransaction();

tx.begin();


Member member = new Member();

member.setId(1L);

member.setName("kok202");

member.setAge(99);

em.persist();


tx.commit();

em.close();

emf.close();

 }

 } 


 Read

 public class Main{

 public static void main(String[] args){

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistent.xml에 등록된 name");

EntityManager em = emf.createEntityManager();

EntityTransaction tx = em.getTransaction();

tx.begin();


Member member = em.find(Member.class, 1L);


tx.commit();

em.close();

emf.close();

 }

 } 



 Update

 public class Main{

 public static void main(String[] args){

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistent.xml에 등록된 name");

EntityManager em = emf.createEntityManager();

EntityTransaction tx = em.getTransaction();

tx.begin();


Member member = em.find(Member.class, 1L);

member.setName("kok303");


tx.commit();

em.close();

emf.close();

 }

 } 



 Delete

 public class Main{

 public static void main(String[] args){

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistent.xml에 등록된 name");

EntityManager em = emf.createEntityManager();

EntityTransaction tx = em.getTransaction();

tx.begin();


Member member = em.find(Member.class, 1L);

em.remove(member);


tx.commit();

em.close();

emf.close();

 }

 } 



EntityManagerFactory는 하나만 생성해서 어플리케이션 전체가 공유해야한다.
EntityManager는 스레드간 공유하면 안된다.
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야한다.
em.flush하면 트랜잭션 안의 이제까지의 쿼리를 날릴 수 있다.