JPA의 시작
JPA 설정을 위해서 persistence.xml을 만들어야 하는데 JPA ORM Mapper file로 생성하면 된다. 하지만 생성시 오류가 난다면 이 프로젝트가 JPA를 사용한다는 것을 명시해 줘야 한다.
Properties에서 Project Facets에서 JPA를 체크하면 해당 xml이 자동으로 생성이 될것이다.
CREATE TABLE MEMBER ( ID VARCHAR(255) NOT NULL, NAME VARCHAR(255), AGE INTEGER NOT NULL, PRIMARY KEY (ID) )
2. pom.xml (하이버네이트와 h2DB 의존성 추가)
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.10.Final</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.187</version> </dependency>
3. persistence.xml (영속성 추가-데이터소스)
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1"> <persistence-unit name="jpaTest"> <!-- 데이터베이스당 하나의 영속성 name은 영속성 고유의 이름으로 지정 --> <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="sa"/> <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.id.new_generator_mappings" value="true" /> <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties> </persistence-unit> </persistence>
3. persistence.xml (영속성 추가-데이터소스)
package jpa.start; import javax.persistence.*; @Entity @Table(name="MEMBER") public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME") private String username; private Integer age;
public String getId() { return id; } public void setId(String id) { this.id = id; }
public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) {
this.age = age;
}
}
package jpa.start; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class App{ public static void main( String[] args ) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpaTest"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); try { tx.begin(); logic(em); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { em.close(); } emf.close(); } public static void logic(EntityManager em) { String id = "id1"; Member member = new Member(); member.setId(id); member.setUsername("name"); member.setAge(2); em.persist(member); member.setAge(20); Member findMember = em.find(Member.class, id); System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge()); // List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList(); System.out.println("members.size=" + members.size()); // em.remove(member); } }
코드 작성중 Entity클래스에서 persistence.xml과 관련한 오류가 발생된다면 persistence.xml에서 우클릭후 JPA Tools-> syschronize Class List를 해주면 Entity 클래스의 오류가 사라진다.
위의 코드는 정말 간단한데. 엔티티매니저를 만들고 트랜젝션을 열면 Member라는 객체는 영속성을 가지게 되고 엔티티 매너지로 persist, remove하는 것 만으로 데이터 베이스를 조작할 수 있고 set하는 것만으로 업데이트가 가능하다.
엔티티매니저팩토리(EntityManagerFactory) persistence.xml의 정보를 읽고 JPA를 동작시키기 위한 기반 객체를 만들고 JPA 구현체에 따라서 데이터베이스 커넥션 풀도 생산한다. 이 말은 엔티티매니저의 생성비용이 크다는 것이다. 그렇기 때문에 엔티티매니저팩토리는 어플리케이션에서 딱 한 번만 생성하고 공유해서 사용해야 한다.
이정도가 JPA의 가장 기본적인 구조이다.
'Programming > 과거포스팅' 카테고리의 다른 글
[JPA] 엔티티 매니저 팩토리와 엔티티 매니저(EntityManagerFactory and EntityManager) (0) | 2016.12.16 |
---|---|
[JPA] - JPQL이란 (0) | 2016.12.16 |
[JPA] JPA란? (0) | 2016.12.12 |
[Jhipster] IntelliJ연동하기 -jhipster 설치 (0) | 2016.12.08 |
Jhipster intelij 설정하기 - jhipster 설치 (0) | 2016.12.08 |