donaricano-btn

하이버네이트 + 스프링(2)


1. ServiceImpl


- 스프링 인티그레이션 기능으로 비즈니스 로직의 세션 관련 오브젝트가 삭제되었다

2. DaoImpl

 

- 하이버네이트의 세션 오브젝트가 제공하는 CRUD는 HibernateTemplate 클래스를 통해 이용한다

3. 하이버네이트 3.0.1 이후 버전

- 3 이후 버전에서는 HibernateTemplate을 사용하지 않고 구현 가능

1) getCurrentSession

- SessionFactory의 getCurrentSession()를 실행하면 현재 사용중인 Session 오브젝트를 가져올수있다(트랜잭션 매니저로 관리되는 세션 오브젝트를 가져올 수 있다)

2) HibernateTemplate을 사용하지 않고 구현

 

a. SessionFactory 직접 사용의 장점

- 하이버네이트에서 제공하는 모든 API를 사용가능

- 하이버네이트에 익숙한 개발자라면 API만 의식하면 되므로 효율적 개발가능

b. 단점

- 직접 세션 오브젝트를 사용하므로 위험할 수 있다

- HibernateTemplate은 안전하지만 버전 4에서 지원 안함


FullSource - https://github.com/KyleJeong/Hibernate/tree/master/hiberSpring


블로그 이미지

리딩리드

,
donaricano-btn

하이버네이트 + 스프링(1)

- 하이버네이트와 스프링을 같이 사용함으로 독립성 높인 간단한 코드가 된다


1. 폴더 구성

2. 정의 파일


1) 데이터 베이스를 정의한다

2) 하이버네이트의 세션 오브젝트를 작성하고 SessionFactory 클래스를 정의한다

3) 스프링이 제공하는 HibernateTemplate 클래스를 정의한다

- 하이버네이트를 더 단순하게 사용할 수 있고 범용 데이터 엑세스 예외로 변환 해준다

- HibernateTemplate 내부는 SessionFactory를 사용, 그러므로 2에서 정의한 프로퍼티를 받는다

4,5) 하이버네이트 트랜잭션 설정

- 하이버네이트 트랜잭션 매니저로 HibernateTransactionManager를 사용한다

- 위 예제는 선언적 트랜잭션으로 Service로 이름이 끝나거나 find, add, remove 모두 대상이됨

FullSource - https://github.com/KyleJeong/Hibernate/tree/master/hiberSpring
블로그 이미지

리딩리드

,
donaricano-btn

단순 하이버네이트 예제


- 하이버네이트만을 이용하면 세션의 열기/ 닫기와 예외처리를 개발자가 기술해야 하기 때문에 소스가 길어짐

- 트랜잭션은 명시적 트랜잭션이됨

- 비즈니스 로직층과 데이터 액세스 층의 강한 연결


1. 폴더구성

2. pom.xml


- 오라클 사용

3. hibernate.cfg.xml

 

4. Person.hbm.xml

 

5. NumDao.java

 

https://github.com/KyleJeong/Hibernate
블로그 이미지

리딩리드

,
donaricano-btn

하이버네이트 기능


1. HQL

- 하이버네이트는 SQL을 이용하지 않지만 HQL을 이용하여 쿼리 언어를 사용해 검색처리

- HQL은 기본적으로 도메인을 다루는 언어이다 

 SQL

HQL 

 SELECT * FROM EMP

 FROM Emp(Emp는 도메인 클래스 이름)

 SELECT * FROM EMP WHERE ID = '1'

 FROM Emp WHERE ID = '1' (ID는 컬럼이 아닌 프로퍼티)


2. 프라이머리키 생성

- 매핑 파일에서 프라이머리키 유형을 지정, 데이터베이스 시퀀스 및 자동증가를 이용하여 프라이머리키 자동 생성하고 테이블 등록


3. 도메인 클래스의 연관

- 도메인 클래스 간의 연관과 테이블 간의 릴레이션 십을 매핑

- 상속 관계도 가능


4. 지연로드

- 오브젝트를 로드하지 않아 리소스 절약 과 성능향상


5. 캐시

- 로드된 오브젝트를 캐시하여 테이블 액세스 회수를 줄임

- 리소스 절약, 성능 향상

블로그 이미지

리딩리드

,