Hibernate 책 학습

1장 

기본 환경 설정

  - Ant를 이용한 환경 설정

  - Maven-ant task를 이용한 라이브러리 자동 다운로드 

  

2장

1) 자바 클래스와 DB 테이블 사이의 맵핑 문서 작성하기

2) 맵핑 코드를 이용해 자바 객체 클래스 생성 방법

3) 맵핑 코드를 이용해 DB 테이블 스키마 생성 방법

  - hibernate.properties 파일을 이용한 기본 DB접속 설정

  

+ hibernate를 properties 파일을 이용해 설정하는 방법

+ log4j를 properties 파일을 이용해 설정하는 방법

-> 기본적으로 해당 프로그램들이 properties 파일을 클래스패스의 최상의 디렉토리를 검색하기 때문에 클래스패스 최상위에 파일을 넣는다.


+ Ant를 이용한 자바 빌드 방법

+ Ant를 이용한 파일 복사 방법


3장

1) 기본 설정을 hibernate.properties 대신 hibernate.cfg.xml 파일로 대체

  - hibernate.cfg.xml 파일 생성

  - 기존 ant build.xml 파일에 해당 xml 파일 참조하도록 수정

  

2) 자바 객체를 데이터베이스 레코드로 저장하기

3) 데이터베이스 레코드를 자바 객체로 가져오기(1)

  - HQL(하이버네이트의 sQL기반 쿼리언어)를 이용한 데이터베이스 조회

  

4) 데이터베이스 레코드를 자바 객체로 가져오기(2)

  - 네임드 쿼리/네임드 파라미터

  - 자바 소스에서 쿼리 분리 하기(맵핑 XML 파일에 넣기)


4장
1) 테이블 간의 조인 관계를 표현하기 (다 대 다 관계) - 컬렉션(Collection)
  * 다대다 조인 테이블을 하이버네이트에서 자동으로 생성관리함
  * 다른 테이블 데이터는 객체 내에 컬랙션으로 표현되어 추가됨
  - Column에 대한 상세 설정 방법
    -> Index 설정, not null 설정, toString 메소드 설정
    
  - 자바5의 타입세이프티 설정 방법
  
2) 객체에서 컬랙션 데이터 입력하기(연관 테이블에 데이터 입력)
3) 객체에서 컬랙션 데이터 읽어오기(연관 테이블에 데이터 검색)
4) 다대다 관계에 대한 양방향 맵핑 기능 이용(이론)
5) 단순한 조인 관계 표현하기(1 대 다 관계) 
  

5장
1) 느슨한 연관
  - 객체를 실제로 참조하기 전까지 연관된 객체를 로드하지 않는 방식 지원
    -> 하이버네이트 세션이 열려져 있는 상태에서만 작동
2) 순서가 있는 컬렉션 설정 방법

3) 다시 읽어보기!!!

4) 순서있는 연관 컬랙션 삭제에 따른 자동처리
  - 부모 객체와 자식 객체의 종속성 설정
    -> 부모가 삭제되면 자식도 동시에 삭제 가능하도록 설정 가능
    -> 중간에 order관련 값들을 자동으로 변경해줌
  
5) 재귀 연관
  - 트리와 같은 구성
  

6장 사용자 정의 값 맵핑 시키기
: 객체의 하나의 값(property)이 enum 또는 특정 클래스랑 직접 맵핑되어 사용되어 질때
즉 컬럼 하나의 값 또는 두개 이상의 값이 enum 또는 클래스와 맵핑 될 수 있는 방법을 알아본다.

1) 컬럼 값 하나를 enum값과 맵핑 시키기 - UserType
2) 테이블의 여러 컬럼을 클래스와 맵핑 시키기 - 복합사용자타입(CompositeUserType)

- 사용자 정의 값 맵핑은 다음 단계로 개발된다.
  .1-enum 값 또는 클래스 정의하기
  .2-(단일 타입)org.hibernate.usertype.UserType 인터페이스를 구현하는 클래스 작성하기
     (복합 타입)org.hibernate.usertype.CompositeUserType 인터페이스를 구현하는 클래스 작성하기
    -> 구현 클래스는 enum 또는 클래스를 Hibernate에서 어떻게 다룰지 구현
  .3-Class 맵핑 문서(ex:Track.hbm.xml)에 프로퍼티 추가하기
  .4-사용자 정의 클래스 컴파일 하기
  .5-Hibernate Tool을 이용해 코드 생성하기
  .6-모든 소스 컴파일 하기
  .7-Hibernate Tool을 이용해 Schema 생성하기
  
  ** Hibernate Tool이 사용자 정의 클래스를 인식하기 위해선 먼저 사용자 정의 클래스가 컴파일 되어 있어야만 한다.


7장 설정 파일 대신 어노테이션(annotation)을 이용해 설정하기
: 이 경우에는 이전에 만들어 놓았던 legacy 코드가 있을때 이를 어떻게 설정파일 없이
하이버네이트를 적용하는지에 대해 설명 한다. 

- 어노테이션을 이용한 하이버네이트 적용 방법
  .1- annotation 관련 하이버네이트 라이브러리를 얻어온다.
  .2- configuration이 어노테이션을 사용한다고 명시한다.
    -> ant라면 <hibernatetool> 하위에 <configuration> 대신 <annotationconfiguration> 태그를 이용해 config 파일을 지정한다.
  .3- 컴파일 순서를 다음으로 진행 되도록 변경 한다. (스키마를 생성하기 전에 전체 클래스들이 컴파일 되어 있어야 하이버네이트가 클래스를 인식한다.)
      클래스 파일 경로에 xml등 설정 파일 복사 -> 소스코드 컴파일 -> 스키마 생성작업
  .4- hibernate.cfg.xml에 맵핑할 클랙스 목록을 추가한다.
  .5- 맵핑한 클래스에 어노테이션을 추가한다.
  .6- 스키마 생성
  .7- 실행 프로그램에서 config 정보를 읽어오는 클래스를 AnnotationConfiguration 클래스를 사용하도록 변경


8장 크리테리아(Criteria) 쿼리 
: Where 절을 객체의 메소드 호출로 대체 하자. 기존 외부 XML 파일에 쿼리를 빼 놓으면, 쿼리가 실행 되기 전까지 쿼리의 오류를 확인할 수 없는 문제가 발생한다. 이를 해결하기 위해 코드상에 Where 조건을 만들 수 있는 기능을 추가해놓았다. 

- 기본 크리테리아 사용 방법 
  -> 기본 조회
  -> 정렬 
  -> 기본 사용 방법
    .1- Session 에서 createCriteria()를 이용해 criteria 객체 생성
    .2- criteria 객체에 조건 추가
    .3- criteria의 list() 호출

- And / Or 조건 추가하기
  -> OR : Restrictions.disjunction()에 생성되는 객체에 조건 추가
  
- 테이블의 특정 컬럼 값만 얻기
  -> 하나의 컬럼 조회 : hibernate는 String 리스트를 리턴
  -> 여러 컬럼 조회 : 각 컬럼의 타입에 맡는 Object배열 리스트를 리턴
  
- 테이블의 통계 정보 얻기

- 연관 테이블의 조건 걸기
  .1- Session 에서 createCriteria()를 이용해 criteria 객체 생성
  .2- criteria 객체를 이용해 sub criteria 객체 생성하기(생성시 조건을 연결할 연관 클래스를 넘겨줘야됨)
  
- example객체를 이용해 Criteria 객체 생성하기
: criteria를 직접 생성하지 말고, 기존 vo객체를 이용해 검색 하고 싶을때 사용한다.
  .1- VO객체에 검색할 속성 값을 설정해 Example 객체를 생성하기
    ex) VOobj vo = new VOobj();
        vo.setProperty("test");
        Example example = new Example(vo);
  .2- 생성된 example 객체를 critera에 조건으로 추가하기
  
- Criteria 객체 사용할때 조건 추가하는 방법
  .1- Restrictions 팩토리 클래스 이용하기
    ex) criteria.add(Restrictions.le("property", value));
  .2- Property 클래스 이용하기
    ex) criteria.add(Property.forName("property").le(value));
    

9장 HQL 
- HQL 작성방법
- 테이블의 모든 데이터 조회하기
- 프로퍼티와 일부분 선택하기
- HQL을 이용해 정렬 하기
- HQL을 이용해 통계 정보 가져오기
- 네이티브 SQL 이용하기
  -> 기존 쿼리를 Hibernate로 마이그레이션 할때 사용하기 

Posted by 빌리 :