ORM(Object Relation Mapper Framework) - Hibernate 이용




[ hibernate 의 장점 ]

=>ORM: 테이블의 행과 클래스의 객체를 매핑시켜서 데이터베이스를 연동하는 방식

=> SQL 없이 데이터베이스 연동 가능

=>SQL Mapper Framework 인 MyBatis 보다 성능이 우수

[ 사용 전 생각해볼 것 ]

=>spring-orm 과 hibernate 라이브러리가 있어야 합니다.

=>VO 클래스가 반드시 있어야 합니다.

=>VO 클래스와 데이터베이스 테이블을 연결하는 설정 파일이 있어야 합니다.

=>LocalSessionFactoryBean  과 PersistencyExceptionTranslationPostProcessor 클래스의 bean이 필요

=>Transaction을 반드시 적용해야 합니다.

[session과 sessionFactory] 

sessionFactory는 Session 객체를 반환 하는 메소드를 제공한다 

session은  org.hibernate.Session 인터페이스이며, insert, update, delete 

그리고 Transaction, Query, Criteria 를 생성하는 factory 메소드를 제공한다

session은 인터페이스 이기때문에 구현해서 사용해야한다 그렇기에 sessionFactory에서 객체를 반환해서 사용한다. 



[1. 저장소 설정] 

<!-- 저장소 설정 -->

<repositories>

<repository>

<id>codelds</id>

<url>https://code.lds.org/nexus/content/groups/main-repo</url>

</repository>

</repositories>




[ 2.pom.xml 파일에서 의존성 설정 ]



<!-- spring 에서 hibernate와 같은 ORM 프레임워크를 사용하기 위한 라이브러리 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>${spring-framework.version}</version>

</dependency>


<!-- Hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-entitymanager</artifactId>

<version>${hibernate.version}</version>

</dependency>


<!-- spring jdbc 의존성 설정을 위한 dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring-framework.version}</version>

</dependency>

<!--오라클 사용을 위한 의존성 설정-->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.3</version>

</dependency>




[ 3. 하이버 네이트 매핑 파일 설정 ]



=> resources 디렉토리에 만들면 안되고 java 디렉토리 안에 패키지 안에 생성해야 합니다.


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">




[ 4. primary key 설정 ]


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="hibernate.domain">

<class name="DTO  or VO 클래스" table="DB테이블이름">

<!--primary key 설정 -->

<id name="code" column="CODE" />

<!-- primary key를 제외한 나머지 프로퍼티 설정 -->


<!-- name의 setter column은 Db의 컬럼이름 -->

<property name="name" column="NAME" />

<property name="manufactuer" column="MANUFACTURE" />

<property name="price" column="PRICE" />

</class>

</hibernate-mapping>


[5.Hibernate를 이용해서 데이터베이스 작업을 수행할 GoodDao 클래스를 만들고 데이터를 삽입하는 메소드를 구현 ]

=> hibernate를 사용할 때는 SessionFactory를 주입받아서 사용합니다. 


package hibernate.dao;


import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;


import hibernate.domain.Good;


@Repository

public class GoodDao {

//Hibernate 사용을 위한 참조형 변수 

@Autowired

private SessionFactory sessionFactory;

//데이터를 삽입하는 메소드 

public void insertGood(Good good) {

// sessionFactory 를 통해 세션객체 생성 

Session session = sessionFactory.getCurrentSession();

session.save(good);

}

}



[<!-- DataSource 클래스의 Bean: 데이터베이스 접속 정보 저장  -->]

<bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />

<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />

<property name="username" value="system" />

<property name="password" value="wnddkd" />

</bean>


[<!-- 데이터베이스 작업 도중 예외가 발생하면 Spring의 예외로변경해서 발생시키기 위한 설정-->]

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />


[<!-- 하이버네이트 사용을 위한 클래스 -->]

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<!--하이버네이트 매핑주소-->

<property name="mappingResources">

<!-- 여러개 입력이 가능하기 때문에 LIST -->

<list>

<value>dao/good.hbm.xml</value>

</list>

</property>


<!-- 데이터 베이스 종류 --> 

<property name="hibernateProperties">

<value>

<!--다른 데이터베이스 쓰라고 하면 검색해서 사용 -->

hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

</value>

</property>

</bean>


<!--반드시 사용해야하는 트랜잭션 2개-->

<!--하이버네이트 트랜잭션 매니저 객체 만들기   -->

<!--하이버네이트는 트랜잭션을반드시 사용해야합니다. 

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

<!-- 트랜잭션 사용을 위한 설정을 추가 -->

<tx:annotation-driven/>



<!-- 어노테이션 설정을 스프링 프로젝트에서 사용하기 위한 설정  -->

<context:annotation-config />

<!-- 객체를 자동으로 생성해 줄 패키지 설정  -->

<context:component-scan base-package="hibernate" />



+ Recent posts