목차

ORM 서비스

개요

객체 모델링(Object Oriented Modeling)과 관계형 데이터 모델링(Relational Data Modeling) 사이의 불일치를 해결해 주는 OR Mapping 서비스로 자바 표준인 JPA를 표준 서비스로 제시하고 구현체로는 JPA 구현체중에 가장 성능이 우수한 것으로 알려진 Hibernate를 이용하였다. 서비스의 특징을 살펴보면 다음과 같다.

설명

주요 개념

This is the caption 옆의 그림에서 보는것과 같이 DBMS 기반의 어플리케이션 수행을 하기 위해 필요한 주요 구성 요소는 Entity, Persistence.xml 이며, 각각은 다음과 같은 역할을 수행한다.

시작 하기

ORM 서비스에 대한 자세한 설명에 앞서 간단하게 ORM 서비스를 시작하는데 필요한 것에 대한 설명을 하고자 한다.

Step1. 사전 준비

필요 Library

본 서비스를 활용하기 위해서 필요한 Library 목록과 설명은 아래와 같다.

라이브러리 설 명 연관 라이브러리
antlr-2.7.7.jar 파서 라이브러리
commons-collections-3.2.jar collection 처리를 위한 라이브러리
commons-dbcp-1.2.2.jar DataSource 라이브러리
commons-logging-1.1.1.jar Logging 처리를 위한 라이브러리 hibernate-annotations-3.4.0.GA.jar에서 참조
log4j-1.3alpha-8.jar Logging 처리를 위한 라이브러리
slf4j-api-1.5.3.jarLogging 처리를 위한 라이브러리
slf4j-log4j12-1.5.3.jar Logging 처리를 위한 라이브러리
commons-pool-1.3.jar pooling 처리를 위한 라이브러리 commons-dbcp-1.2.2.jar에서 참조
dom4j-1.6.1.jar XML 파싱 라이브러리 hibernate-3.2.4.ga.jar 에서 참조
ejb3-persistence-1.0.2.GA.jar JPA Interface 클래스 라이브러리
hibernate-annotations-3.4.0.GA.jar Hibernate Annotation
hibernate-entitymanager-3.4.0.GA.jar Hibernate Entity Manager 구현체 라이브러리
hibernate-commons-annotations-3.1.0.GA.jar Hibernate 공통 annotation 라이브러리 hibernate-entitymanager-3.4.0.GA.jar에서 참조
hibernate-core-3.3.0.SP1.jar Hiberante Core 라이브러리 hibernate-entitymanager-3.4.0.GA.jar에서 참조
javassist-3.4.GA.jar 자바 bytecode 조작 라이브러리 hibernate-entitymanager-3.4.0.GA.jar에서 참조
jta-1.1.jar JTA 인터페이스 라이브러리 hibernate-entitymanager-3.4.0.GA.jar에서 참조
hsqldb-1.8.0.10.jar HSQL JDBC 드라이버
mysql-connector-java-5.1.6.jar MYSQL JDBC 드라이버
ojdbc-14.jar ORACLE JDBC 드라이버
junit-4.4.jar 테스트 지원 라이브러리

Step2. Entity 클래스 생성

간단한 형태의 Entity 클래스를 생성한다. 네개의 Attribute로 구성되어 있고 각각의 getter,setter 메소드로 구성되어 있다.

Entity 클래스
@Entity
public class Department implements Serializable {
 
   private static final long serialVersionUID = 1L;
 
   @Id
   private String deptId;
 
   private String deptName;
 
   private Date createDate;
 
   private BigDecimal empCount;
 
   public String getDeptId() {
      return deptId;
   }
 
   public void setDeptId(String deptId) {
      this.deptId = deptId;
   }	   
   ...
}

Step3. persistence.xml 생성

위에서 정의한 Entity 클래스를 가지고 JPA 수행하기 위한 프로퍼티 파일로 구현체제공 클래스정보,엔티티클래스정보,DB접속 정보,로깅정보,테이블자동생성정보를 포함하고 있다.

<persistence-unit name="PersistUnit" transaction-type="RESOURCE_LOCAL">
 
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
 
   <class>egovframework.Department</class>
   <exclude-unlisted-classes/>
 
   <properties>
      <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
      <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:testdb"/>
      <property name="hibernate.connection.username" value="sa"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
 
      <property name="hibernate.connection.autocommit" value="false"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.hbm2ddl.auto" value="create"/>
   </properties>
 
</persistence-unit>

Step4. 테스트 클래스 생성

위에서 정의한 Department를 이용하여 입력,수정,조회,삭제 처리를 하는 것을 JUNIT형태로 구성하였다.

@Test
public void testDepartment() throws Exception {
 
   String modifyName = "Marketing Department";
   String deptId = "DEPT-0001";
   Department department = makeDepartment(deptId);
 
   // Entity Manager 생성
   emf = Persistence.createEntityManagerFactory("PersistUnit");
   em = emf.createEntityManager();	
 
   // 입 력
   em.getTransaction().begin();
   em.persist(department);
   em.getTransaction().commit();	
 
   em.getTransaction().begin();
   Department departmentAfterInsert = em.find(Department.class, deptId );
   // 입력 확 인
   assertEquals("Department Name Compare!",department.getDeptName(),departmentAfterInsert.getDeptName());
 
   // 수 정
   departmentAfterInsert.setDeptName(modifyName);
   em.merge(departmentAfterInsert);
   em.getTransaction().commit();	
 
   em.getTransaction().begin();
   Department departmentAfterUpdate = em.find(Department.class, deptId );
   // 수 정 확 인
   assertEquals("Department Modify Name Compare!",modifyName,departmentAfterUpdate.getDeptName());
 
   // 삭 제
   em.remove(departmentAfterUpdate);
   em.getTransaction().commit();	
 
   // 삭 제 확 인
   Department departmentAfterDelete = em.find(Department.class, deptId );
   assertNull("Department is Deleted!",departmentAfterDelete);
 
   em.close();
 
}

Step5. 실 행

  1. ormsimpleguide.zip 파일을 다운로드 받아서 압축을 푼다.
  2. 이클립스에서 압축 푼 폴더를 선택하여 프로젝트를 Import 한다.
  3. 프로젝트내 src 폴더에 Department.java, DepartmentTest.java, resources 폴더에 META-INF/persistence.xml, log4j.xml 가 정상적으로 있는지 확인한다.
  4. lib에 라이브러리 파일이 있는지 확인한다.
  5. DepartmentTest.java를 선택하여 마우스 오른쪽 클릭하여 Run As > JUnit Test 실행한다.
  6. JUnit 결과창에서 정상적으로 수행된 것을 확인한다.

※ ORACLE 이나 MySQL의 경우는 첨부되는 persistence.xml 의 주석을 참고하여 설정하고 수행하면 정상적으로 수행되는 것을 확인할 수 있다.

상세 설명

참고자료