Hibernate 쿼리 관련 지식 시간: 2009-10-04 07:14:25 출처: 인터넷 작성자: 알 수 없음 클릭 수: 146회 먼저 get()과 load() 메서드의 차이점을 소개합니다.
get() 메소드와 load() 메소드의 차이점은 주로 2차 캐시를 사용한다는 점입니다.
load() 메소드는 2차 캐시를 사용하며, get() 메소드는 1차 캐시에 데이터베이스가 없으면 직접 쿼리하고, 2차 캐시에서는 검색하지 않습니다.
get(): 데이터베이스에서 get()과 load() 메소드 간의 차이점을 먼저 소개하는 경우:
get() 메소드와 load() 메소드의 차이점은 주로 2차 캐시를 사용한다는 점입니다.
load() 메소드는 2차 캐시를 사용하며, get() 메소드는 1차 캐시에 데이터베이스가 없으면 직접 쿼리하고, 2차 캐시에서는 검색하지 않습니다.
get(): 데이터베이스에 레코드가 없으면 null을 반환합니다. get()은 어쨌든 데이터를 반환합니다.
load(): 데이터베이스에 레코드가 없으면 예외가 발생합니다. 데이터가 있으면 프록시 객체가 반환됩니다.
list와 iterator() 메소드의 차이점: (N+1?)
list() 메소드가 실행되면 쿼리 결과에 필요한 쿼리문을 직접 실행합니다.
iterator() 메소드는 먼저 쿼리를 실행하여 객체 ID를 획득한 후, 각 ID 값을 기준으로 쿼리할 객체를 획득합니다.
따라서 list() 메서드를 사용하는 쿼리의 경우 일반적으로 하나의 SQL 문만 실행되는 반면, iterator() 메서드를 사용하는 쿼리의 경우 N+1개의 SQL 문을 실행해야 할 수 있습니다. (N은 결과 집합의 레코드 수입니다. ).
결과 세트는 다르게 처리됩니다.
list() 메소드는 모든 결과 세트 객체를 한 번에 활성화하고, 쿼리 결과를 기반으로 모든 결과 세트 객체를 초기화합니다. 결과 집합이 매우 크면 많은 메모리를 차지하며 심지어 메모리 오버플로도 발생합니다.
iterator() 메서드는 실행 중에 모든 개체를 한 번에 초기화하지 않지만 결과 집합에 대한 액세스를 기반으로 개체를 초기화합니다. 캐시를 너무 많이 차지하여 메모리 오버플로가 발생하는 것을 방지하기 위해 한 번 액세스하는 동안 캐시의 개체 수를 제어할 수 있습니다.
HQL: HQL은 객체 지향 쿼리 언어입니다. HQL의 작동 객체는 클래스, 인스턴스, 속성 등입니다.
SQL: SQL의 작업 개체는 데이터 테이블, 열과 같은 데이터 개체입니다.
Hql은 완전한 객체 지향 쿼리 언어이므로 상속 및 다중 항목과 같은 기능을 지원할 수 있습니다.
HQL 쿼리는 Query 클래스에 의존하며 각 Query 인스턴스는 쿼리 개체에 해당합니다.
매개변수 설정 기능인 쿼리 인터페이스는 실제 HQL 쿼리 인터페이스입니다.
//쿼리 객체 생성
쿼리 query = session.createQuery("from Customer as c where c.name=:customerName and c.age=:customerAge");
//동적 바인딩 매개변수
query.setString("고객이름","톰");
query.setInteger("customerAge",21);
//쿼리문을 실행하고 결과를 반환합니다.
목록 결과 = query.list();
HQL 쿼리 단계:
1: Hibernate Session 개체를 가져옵니다.
2: HQL 문을 작성합니다.
3: HQL 문을 매개변수로 사용하여 Session의 createQuery 메소드를 호출하여 쿼리 객체를 생성합니다.
4: HQL 문에 매개변수가 포함된 경우 Query의 setXXX() 메서드를 호출하여 매개변수에 값을 할당합니다.
5: 쿼리 결과를 탐색하려면 Query 개체의 목록 및 기타 메서드를 호출합니다.
쿼리에는 다음 두 가지 메서드도 포함되어 있습니다.
setFirstResult(int firstResult): 반환된 결과 집합이 시작되는 레코드를 설정합니다.
setMaxResults(int maxResults): 이 쿼리에서 반환된 결과 수를 설정합니다.
엔터티 삭제 및 업데이트.
프로젝션 쿼리: 속성의 일부만 쿼리합니다.
속성을 쿼리하면 문자열이 반환됩니다.
두 필드를 쿼리하면 배열이 반환됩니다.
동적으로 구성된 쿼리: 주로 수십 개의 테이블 쿼리에 사용됩니다.
새 객체를 생성하려면 생성자를 추가하세요.
새 객체를 생성할 때 패키지 이름을 추가하세요.
count(*)를 사용하지 말고 count(영구 객체)를 사용하십시오.
그룹화 및 정렬:
Order by 절은 asc 또는 desc 키워드로 정렬할 수 있습니다.
예를 들면 다음과 같습니다. User u Order by u.name asc,u.age desc;
조항 및 통계 쿼리별로 그룹화:
예: String hql = "사용자 u 그룹에서 count(u)>10인 u.age를 기준으로 count(u),u.age를 선택합니다.";
목록 목록 = session.createQuery(hql).list();
표준 SQL 집계 함수는 count(), sum(), max(), min(), age() 등과 같은 HQL 문에서 사용할 수 있습니다.
연결 쿼리:
내부 조인: 내부 조인
왼쪽 외부 조인: 왼쪽 외부 조인
오른쪽 외부 조인:오른쪽 외부 조인
완전 조인: 완전 조인(일반적으로 사용되지 않음)
긴급 외부 조인: 왼쪽 외부 조인 가져오기, 왼쪽 조인
가져오기: 연결 데이터, 특히 컬렉션 데이터를 한 번에 가져오는 데 사용됩니다. 데이터베이스와의 상호 작용 횟수를 줄입니다.
Left out Join: Outer Join을 사용하여 왼쪽 테이블의 모든 레코드와 해당 주문 클래스의 레코드 정보가 표시됩니다.
Right Out Join: Left Out Join과 반대로 Right Out Join은 HQL의 오른쪽 테이블에 있는 모든 레코드와 해당 Customer 개체 레코드 정보를 반환합니다.
컬렉션 데이터를 얻는 네 가지 방법:
1:Hibernate.initialize(user.getOrder());
2:user.getOrder().size();
3: 좌우 긴급 연결
4: 고급 필터
기준 쿼리: 개체를 사용하여 개체 쿼리를 수행합니다.
주요 인터페이스는 Criteria, Criterion, Expression_r 및 Restrictions 클래스입니다. 런타임 시 SQL 문의 동적 생성을 지원하는 기능.
조건부 쿼리 단계:
1: seesion의 CreateCriteria() 메소드를 통해 Criteria 객체 생성
2: 쿼리 개체를 설정합니다. 이름은 개체의 속성을 나타냅니다.
3: Criteria 개체에 쿼리 조건 추가
4: list() 쿼리를 실행하여 결과를 반환합니다.
조건부 쿼리는 세 가지 클래스를 통해 완성됩니다.
기준: 쿼리를 나타냅니다.
Criterion: 쿼리 조건을 나타냅니다.
제한 사항: 쿼리 조건을 생성하기 위한 도구 클래스입니다.
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx