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" />