학습 전략과 지속성을 생성하는 프레임 워크를 최대 절전 모드

기본 키 생성 전략

1. 기본 키의 카테고리

자연의 기본 키

자체 테이블의 기본 키 필드로, 특정 개체의 속성, 개체 자체의 고유 한 속성. 우리는 사람의 ID 번호, 이름, 성별 및 기타 속성이 말하는, ID 번호는 자연의 기본 키로에만 가능합니다.

대리 기본 키

기본 키 테이블 자체는 필수 아닌 우리가 추가로 기본 키에 임의의 문자열 방법을 사용하여 같은 자동 시스템의 성장, 또는를 사용합니다. 그것은 미래에 사용자 필드를 수정하기 위해 우리를 도울 수 있도록 우리가 일반적으로 대리 기본 키를 사용하여 개발. 예를 들어 우리가 학생 데이터를 입력하면 두 학생이 뒤쪽으로 기록 된 숫자를 배울 때 그는 매우 귀찮은 것 학생 정보를 수정로 이동합니다 우리를 원하므로 예를 들어, 우리는 자연의 기본 키 (학생 수)를 사용, 우리는 테이블이기 때문에 두 개의 동일한 기본 키가 나타나지 않을 수 있습니다.

2. 주 키 생성 전략

대리 기본 키를 사용하는 과정에서 수동으로 설정 기본 키에 사용자를 허용 할 수 없습니다 자동으로 생성 된 기본 키를 수행하려고합니다. 일반 데이터베이스는 자동으로 프로그램이 고유 식별자를 생성하게 성장합니다.

준비 과정, 이벤트 내부 주 키 생성 전략의 다양성을 줄이기 위해, 그들을 최대 절전 모드에서 :

  • 증가

    전략 : 자동 증가 긴, 짧은, INT
    참고 : 현재의 방법은 다음 레코드 할당을위한 하나의 기준으로 다음 가장 큰 ID 번호 테이블을 발견하는 것입니다 때문에, 다중 스레드를 사용하지 않는 단일 스레드를 사용. 그래서 때 데이터베이스 쿼리 중 동시에 두 개의 스레드 id 필드 두 개의 스레드가 반드시 두 개의 스레드 ID 삽입 레코드 ID 같은 오류가 발견 동일 하나입니다!

  • 신원
    전략 : 자동 성장
    원리 : 자동 데이터베이스 성장 메커니즘 성장 전략을 기본 데이터베이스의 사용. MySQL의 자동 증가, 오라클은 자동으로 증가하지 않습니다.

  • 시퀀스
    전략 : 자동 성장
    원리 : 순서의 방법으로는, 순서가 오라클 지원 시퀀스를 지원하는 데 필요한, MySQL은 직렬화를 지원하지 않습니다

  • UUID
    정책 : 기본 키를 입력 문자열의 경우
    원칙 : 사용하여 임의로 생성 된 문자열은 기본 키를 최대 절전 모드

  • 기본
    정책 : 로컬 정책
    원칙 : 자동 스위치 ID 및 시퀀스

  • 할당
    전략 : 최대 절전 모드를 사용하면 기본 키를 관리하는 데 도움이되지 않습니다
    원칙을 수동으로 기본 키를 생성하기 위해 전화 또는 프로그램에 의해 제공에 :

우리가 일반적으로 기본 사용하는의 개발에, 모두 UUID.

지구력 화

1. 무엇 지속적 영속 클래스 &

지속성이란 무엇인가

프로세스의 메모리 오브젝트 지속성 데이터베이스 (저장). 을위한 프레임 워크 프레임 워크 지속성 최대 절전 모드 데이터를 자동으로 업데이트됩니다 업데이트를 호출하지 않는 개체의 상태가 지속적으로 같은 영속 객체가 자동으로 한 데이터를 업데이트합니다

영속 클래스는 무엇인가

자바 클래스 매핑 관계는 데이터베이스와 함께 설립했다. 자바 클래스 매핑 파일 +

쓰기 규칙 2. 영속 클래스

  1. 대한 영구 클래스 인수가없는 생성자
    인수가없는 생성자가 객체 반사 작성할 수없는 경우 기초 오브젝트는 반사에 의해 생성됩니다
  2. 내부 private 필드는 할 수 및 설정 방법을 제공
    하고 제공하지 않습니다. 최대 절전 모드는 객체의 값을 얻을 수 없습니다
  3. 개체 지속성 클래스 에 기본 키 대응 사이의 데이터베이스 테이블의 OID 제공
    자바가 같은 오브젝트하는 주소 객체에 의해 구별
    데이터베이스가 동일한 레코드인지를 구분하기 위해 기본 키를 사용하여
    영속 클래스의 OID 속성에 의해 구별 최대 절전 모드에서입니다 이 같은 객체입니다
  4. 영구 클래스는 속성 패키지 타입의 메이크업 사용
    패키지 유형 기본값 NULL
    기본 타입 디지털 기본값을
  5. 영속 클래스가 변형 최종 사용하지 않는
    지연과의 관계를로드를 지연 절전 부하 창에 프록시 객체를 최적화 수단. 동적 프록시, 바이트 코드 향상 기술의 하층이 클래스 상속 프록시. 최종 경우 상속 될 수 없습니다, 상속 될 수 없습니다,로드가 무효 인 프록시 객체 지연을 만들 수 없습니다

영속 클래스의 3 부문

더 나은 세 가지 상태로 최대 절전 모드 영속 클래스, 영속 클래스 객체를 관리하기 위해, 완료 영속 클래스의 ORM의 조작에 의한 프레임 워크 지속성 최대 절전 모드 :

주 이름 상태 구별하는
순간 상태 단일 OID가있다
세션 관리하지 않습니다
그냥 새로운 객체가 세트 ID를하지 않았다, 그것은 세션에 의해 관리되지 않은
영구 상태 우리는 고유 한 OID가
세션 관리가를
이드가
세션 메소드를 호출하는 세션에 객체는 세션 만 관리했다
무료 호스팅 / 주 / 오프라인 상태의 우리는 고유 한 OID가이
세션 관리하지 않습니다
세션이 폐쇄 될 때 닫을 때
객체는 자유 형식을 처리

상태 전이 다이어그램 :

캐시

캐시 무엇, 그것은 최적화 된 방법을 의미한다, 따라서 캐시 (메모리)에 저장된 데이터는 데이터를 가져 우리의 탐구의 효율성을 향상시킬 수있는 데이터 소스 (데이터베이스)가 될 필요가 없습니다. 캐시는 세션의 라이프 사이클에 부합하는 세션 수준이, 그리고 자바 세션 구성하는 일련의 집합 인 것을 특징으로하고, 파티션 캐시와 수준이 캐시가 최대 절전 모드. A는 내장 캐시 제거되지 않습니다 . 차 캐시는 일반적으로 기업에서 자신의 구성은 기본적으로 활성화되어 안 할 SessionFactory에 레벨 캐시이고 지금 레디 스

캐시의 특성 (1)

  • 때 경우가 갱신 () 될 saveOrUpdate ()가, 저장 세션 인터페이스 ()를 사용하여 응용 프로그램, 해당하는 세션 객체 캐시가없는 자동으로 캐시에 기록 된 데이터베이스에서 해당 정보를 조회합니다 .
  • 당신이 세션 인터페이스 부하를 호출 할 때, () 메소드를 취득하고,리스트 반복자 방법 쿼리 인터페이스는 것 , 그것은 (는) 데이터베이스를 쿼리하지 않습니다, 반환되는 객체가 캐시에 있는지 여부를 확인 에 해당 객체가 캐시를 조회 할 수없는 경우, 그리고 해당 데이터베이스 쿼리 객체들, 그리고 캐시에 추가.
  • 당신이 session.close 메서드를 호출 할 때, 캐시는 삭제됩니다

예제를 살펴 보자 :

 @Test
    public void testSession(){
        Session session = HibernateUtil.openSession();
        Transaction transaction = session.beginTransaction();
        //第一次获取缓存中不存在需要发送sql到数据库中查询
        Customer customer1 = session.get(Customer.class, 2L);
        System.out.println(customer1);
        //第二次获取相同的数据,缓存中已经存在不需要去数据库获取
        Customer customer2 = session.get(Customer.class, 2L);
        System.out.println(customer2);
        System.out.println(customer1 == customer2);

        transaction.commit();
        session.close();
    }

위의 코드의 결과가 실행됩니다 :

당신은 두 번째 이유는 캐시에서 직접 수행 할 수 있습니다 만 우리가 SQL 문을 보낼 수 있도록 최대 절전 모드, 우리가 두 번 같은 레코드에 대한 요청을 보낼 것을 볼 수 있습니다. 그리고 우리는 동일한 개체 중 두 가지를 볼 수 있습니다!

2 캐시 내부 구조

그 중, 캐시 영역 : 스냅 샷 지구

우리는 데이터베이스를 조회하기 위해 ID를 사용하는 경우, 결과는 쿼리 캐시가 세션에 왼쪽 된 최대 절전 모드 것, 그것은 것입니다 스냅 샷을 배치하는 세션에 데이터를 복사 .
세션이 또한 캐시 (플러시)를 정리할 때 우리가) (tr.commit를 사용하는 경우 세션 레벨이 때, 캐시를 청소 Hibernate는 비교를 위해 개체의 캐시 개체 및 스냅 샷의 OID를 사용합니다 속성 변경, 업데이트 문을 두 객체 (object 및 캐시 객체 스냅 샷), 데이터베이스 업데이트하는 경우 , 데이터 영역의 스냅 샷 데이터 캐시로 업데이트되는이 시간, 두 객체의 경우 속성은 다음 업데이트 문을 실행하지 않는, 변경되지 않습니다. 목표는 일관된 데이터 캐시와 데이터베이스를 확인하는 것입니다.

이것은 또한 우리의 상기 설명합니다 데이터가 자동으로 업데이트됩니다 이유는 개체 지속성 상태를 !

추천

출처www.cnblogs.com/ThinMoon/p/12634981.html