>  기사  >  Java  >  Java 지속성 계층 인터뷰 질문 (1)

Java 지속성 계층 인터뷰 질문 (1)

王林
王林앞으로
2020-03-14 17:45:222108검색

Java 지속성 계층 인터뷰 질문 (1)

1. ORM이란 무엇인가요?

ORM(Object-Relational Mapping)은 프로그램의 객체지향 모델과 데이터베이스의 관계형 모델 간의 불일치 문제를 해결하는 기술입니다.

간단히 말하면 ORM은 데이터베이스 간의 매핑을 위한 객체와 메타데이터를 설명합니다. (Java에서는 XML 또는 주석을 사용할 수 있음) 프로그램의 객체를 관계형 데이터베이스에 자동으로 유지하거나 관계형 데이터베이스 테이블의 행을 Java 객체로 변환합니다. 이는 본질적으로 데이터를 한 형식에서 다른 형식으로 변환합니다.

2. Hibernate의 SessionFactory는 스레드로부터 안전합니까? 세션은 스레드로부터 안전합니까(두 스레드가 동일한 세션을 공유할 수 있습니까)?

SessionFactory는 Hibernate의 데이터 저장 개념에 해당하며 스레드로부터 안전하며 여러 스레드에서 동시에 액세스할 수 있습니다. SessionFactory는 일반적으로 시작 시에만 빌드됩니다. 애플리케이션의 경우 쉬운 액세스를 위해 싱글톤 모드를 통해 SessionFactory를 캡슐화하는 것이 가장 좋습니다.

(학습 동영상 추천: java 동영상 튜토리얼)

Session은 스레드에 안전하지 않은 경량 객체(스레드 간에 세션을 공유할 수 없음)로, 데이터베이스와 상호 작용하는 작업 단위를 나타냅니다. 세션은 SessionFactory에 의해 생성되며 작업이 완료된 후 닫힙니다. 세션은 지속성 계층 서비스에서 제공하는 기본 인터페이스입니다.

세션은 데이터베이스 연결 획득을 지연시킵니다(즉, 필요할 때만 연결을 얻습니다). 너무 많은 세션이 생성되는 것을 방지하려면 ThreadLocal을 사용하여 세션을 현재 스레드에 바인딩하여 동일한 스레드가 항상 동일한 세션을 얻도록 할 수 있습니다. Hibernate 3에 있는 SessionFactory의 getCurrentSession() 메소드가 이를 수행할 수 있습니다.

3. Session의 save(), update(), merge(), lock(), saveOrUpdate() 및 persist() 메소드는 무엇을 합니까? 차이점은 무엇입니까?

Hibernate 객체에는 임시, 지속, 분리의 세 가지 상태가 있습니다.

save(), persist() 또는 saveOrUpdate() 메서드를 호출하여 임시 인스턴스를 영구화할 수 있습니다.

update(), saveOrUpdate(), lock() 또는 복제()를 호출하여 무료 인스턴스를 영구화할 수 있습니다. ) 지속적인 상태가 됩니다. save() 및 persist()는 SQL INSERT 문을 트리거하고 update() 또는 merge()는 UPDATE 문을 트리거합니다.

save()와 update()의 차이점은 하나는 임시 객체를 영구 상태로 바꾸고, 다른 하나는 자유 객체를 영구 상태로 바꾸는 것입니다. merge() 메서드는 save() 및 update() 메서드의 기능을 완료할 수 있으며, 그 목적은 새 상태를 기존 영속 객체에 병합하거나 새 영속 객체를 생성하는 것입니다.

persist() 메서드의 경우 공식 문서의 지침을 따르세요.

1. persist() 메서드는 임시 인스턴스를 유지하지만 식별자가 영구 인스턴스에 즉시 채워지는 것을 보장하지는 않습니다. 식별자 채우기는 플러시 시간까지 지연될 수 있습니다.

2. persist() 메서드는 트랜잭션 외부에서 호출될 때 INSERT 문을 트리거하지 않도록 합니다. ) 메소드 매우 필요합니다.

(권장 튜토리얼: java 빠른 시작)

3. save() 메소드는 항목 2를 보장하지 않습니다. 식별자를 반환하므로 INSERT 문을 즉시 실행합니다. 거래가 내부인지 외부인지 여부. lock() 메서드와 update() 메서드의 차이점은 update() 메서드는 분리된 상태의 객체를 영구 상태로 변경하는 것입니다. lock() 메서드는 분리된 상태의 객체를 변경합니다. 그것은 지속적인 상태로 변하지 않았습니다.

4. Session

1. 데이터베이스 쿼리 기능을 호출하기 전에 Session은 먼저 1단계 캐시에서 엔터티 유형과 기본 키를 검색합니다. 검색 적중 및 데이터 상태가 적법한 경우

2. 첫 번째 수준 캐시에 적중이 없으면 다음 세션은 현재 NonExists 레코드에 있습니다(잘못된 쿼리가 반복되는 경우 쿼리 블랙리스트와 동일). 나타나면 빠른 판단이 가능해 성능이 향상됩니다) Search, NonExists에 동일한 쿼리 조건이 존재하면 null을 반환합니다.

3. 1차 캐시 쿼리가 실패하면 2차 캐시를 쿼리하고, 2단계 캐시 적중 시 바로 반환

4. 이전 쿼리가 실패하면 SQL 문을 실행하여 해당 레코드를 찾지 못하면 해당 쿼리를 Session의 NonExists에 추가하고 기록하고 반환합니다. null;

5. 매핑 구성 및 SQL 문에 따라 해당 엔터티 개체를 생성합니다.

6. 개체를 세션 관리에 통합합니다.

7. 해당 인터셉터의 onLoad 메소드를 실행합니다.

8. 활성화되어 두 번째 수준 캐시를 사용하도록 설정된 경우 데이터 개체를 두 번째 수준 캐시에 통합합니다. .

5. MyBatis에서 자리 표시자를 작성하는 데 #과 $를 사용하는 것의 차이점은 무엇인가요?

# 들어오는 데이터를 문자열로 처리하고 들어오는 데이터에 자동으로 따옴표를 추가합니다.

$는 들어오는 데이터를 SQL로 직접 표시하고 생성합니다.

참고: $ 자리 표시자를 사용하면 SQL 삽입 공격이 발생할 수 있습니다. #을 사용할 수 있는 경우에는 $를 사용하지 마세요. order by 절을 작성할 때는 # 대신 $를 사용해야 합니다.

추천 튜토리얼: java 인터뷰 질문

위 내용은 Java 지속성 계층 인터뷰 질문 (1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제