Hibernate (15) HQL 과 QBC 조회 방식 상세 설명

우선 hibenate 가 제공 하 는 몇 가지 검색 방식 을 살 펴 보 겠 습 니 다.
1. 탐색 대상 그림 검색 방식 :불 러 온 대상 에 따라 다른 대상 으로 탐색 합 니 다.예 를 들 어 불 러 온 customer 대상 에 대해 getOrders (). iterator () 방법 을 호출 하면 모든 연 결 된 Order 대상 으로 탐색 할 수 있 습 니 다. 관련 단계 에서 검색 지연 정책 을 사용 하면 이 방법 을 처음 실행 할 때 Hibernate 는 데이터 라 이브 러 리 에서 연 결 된 Order 대상 을 불 러 옵 니 다. 그렇지 않 으 면 캐 시 에서 Order 대상 을 가 져 옵 니 다. 
2. OID 검색 방식 :대상 의 OID 에 따라 대상 을 검색 합 니 다.Session 의 get () 과 load () 방법 은 이러한 기능 을 제공 합 니 다.앱 에서 OID 를 미리 알 았 다 면 이런 검색 대상 방식 을 사용 할 수 있다. 
3. HQL 검색 방식 :Hibernate 는 Query 인 터 페 이 스 를 제공 합 니 다. Hibernate 가 제공 하 는 전문 적 인 HQL 조회 인터페이스 로 각종 복잡 한 HQL 조회 문 구 를 실행 할 수 있 습 니 다. 
4. QBC 검색 방식 :QBC 사용 (Query) By Criteria) API 는 대상 을 검색 합 니 다.이 API 는 문자열 기반 검색 어 를 패키지 하여 대상 을 대상 으로 하 는 인 터 페 이 스 를 제공 합 니 다. 
           앞의 두 가 지 는 앞에서 우 리 는 모두 능숙 하 게 여러 번 사용 한 적 이 있 는데, 지금 우 리 는 HQL 검색 방식 을 살 펴 보 자.HQL(Hibernate Query Language) 는 대상 을 대상 으로 하 는 조회 언어 로 SQL 조회 언어 와 비슷 합 니 다.하 이 버 네 이 트 가 제공 하 는 다양한 검색 방식 중에서 HQL 은 가장 광범 위 하 게 사용 되 는 검색 방식 이다.그것 은 다음 과 같은 기능 을 가지 고 있다. 
– 검색 어 에 다양한 검색 조건 설정 
- 투영 조 회 를 지원 합 니 다. 즉, 대상 의 일부 속성 만 검색 합 니 다. 
– 페이지 별 조회 지원 
– 연결 조회 지원 
– 그룹 검색 지원, having 및 group 사용 가능 키워드 
– sum (), min (), max () 와 같은 내장 집합 함 수 를 제공 합 니 다. 
– 하위 검색 지원, 즉 삽입 식 검색 지원 
– 동적 바 인 딩 매개 변수 지원 
다음은 HQL 검색 절 차 를 실례 를 통 해 살 펴 보 겠 습 니 다.
//    Query   
Query query=session.createQuery("from Customer as c where " 
+" c.name=:customerName " 
+"and c.age=:customerAge"); 
//       
query.setString("customerName","Tom"); 
query.setInteger("customerAge",21); 
//      ,       
List result= query.list();

위의 이 실례 를 통 해 우 리 는 알 수 있다.
(1) 세 션 의 createQuery () 방법 을 통 해 HQL 검색 어 를 포함 하 는 Query 대상 을 만 듭 니 다.HQL 검색 어 는 "customerName" 과 "customerAge" 와 같은 이름 의 매개 변 수 를 포함 할 수 있 습 니 다. 
(2) 동적 바 인 딩 매개 변수.Query 인 터 페 이 스 는 문자열 형식의 customerName 에 매개 변 수 를 할당 하 는 방법 등 다양한 종류의 이름 을 붙 이 는 방법 을 제공 합 니 다. 
(3) Query 의 list () 방법 으로 검색 어 를 실행 합 니 다.이 방법 은 List 형식의 조회 결 과 를 되 돌려 주 고 List 집합 에 조회 조건 에 맞 는 지구 화 대상 을 저장 합 니 다. 
Query 에 서 는 좋 은 방법 으로 프로 그래 밍 방식 도 제공 합 니 다. hibenate 의 API 를 보면 query 류 가 제공 하 는 set 방법의 반환 값 이 query 대상 인지 알 수 있 습 니 다. 그러면 코드 를 더욱 소개 할 수 있 습 니 다. 예 를 들 어.
List result=session.createQuery("……") .setString("customerName","Tom") 
.setInteger("customerAge",21) .list();

QBC
HQL 검색 방식 을 사용 할 때 프로그램 에서 문자열 기반 HQL 검색 어 를 정의 해 야 합 니 다. QBC API 검색 대상 의 또 다른 방식 을 제공 합 니 다. 주로 Criteria 인터페이스, Criterion 인터페이스 와 Expression 류 로 구성 되 어 있 으 며, 실행 할 때 동적 으로 검색 문 구 를 생 성 하 는 것 을 지원 합 니 다. 
QBC 검색 단계:
1) 세 션 의 createCriteria () 방법 을 호출 하여 Criteria 대상 을 만 듭 니 다.
2) 조회 조건 을 설정한다.Expression 클래스 는 검색 조건 을 설정 하 는 정적 방법 을 제공 합 니 다. 이 정적 방법 들 은 모두 Criterion 인 스 턴 스 를 되 돌려 줍 니 다. 모든 Criterion 인 스 턴 스 는 검색 조건 을 대표 합 니 다.Criteria 의 add () 방법 은 조회 조건 을 추가 하 는 데 사 용 됩 니 다. 
3) Criteria 의 list () 방법 으로 검색 어 를 실행 합 니 다.이 방법 은 List 형식의 조회 결 과 를 되 돌려 주 고 List 집합 에 조회 조건 에 맞 는 지구 화 대상 을 저장 합 니 다.다음은 QBC 조회 의 구체 적 인 절 차 를 실례 를 통 해 살 펴 보 겠 습 니 다.
//    Criteria   
Criteria criteria=session.createCriteria(Customer.class); 
//      ,          Criteria  
Criterion criterion1= Expression.like("name", "T%") ; 
Criterion criterion2= Expression.eq("age", new Integer(21)) ; 
criteria=criteria.add(criterion1); 
criteria=criteria.add(criterion2); 
//      ,       
List result=criteria.list();

위의 프로그램 코드 에 대해 Criteria 의 list () 방법 을 실행 할 때 Hibernate 에서 실행 하 는 SQL 조회 문 구 는 다음 과 같 습 니 다. 
select * from CUSTOMERS where NAME like 'T%' and AGE=21; 
주: 표현;클래스 는 org. hibenate. criterion. Restrictions 의 하위 클래스 이기 때문에 이 클래스 로 바 꿀 수 있 습 니 다.Criteria 도 사용 하 는 방법 으로 연 결 된 프로 그래 밍 스타일 입 니 다. add 방법 반환 값 도 Criteria 이기 때 문 입 니 다. 아래 코드 와 같 습 니 다.
List result=session.createCriteria(Customer.class).add(Expression.like("name", "T%") .add(Expression.eq("age", newInteger(21)) .list();

Query 와 Criteria 인 터 페 이 스 는 검색 결 과 를 페이지 별로 표시 하 는 방법 을 제공 합 니 다. 
–setFirstResult(int firstResult): 어느 대상 에서 검색 을 시작 할 지 설정 합 니 다. 매개 변수 firstResult 는 이 대상 이 검색 결과 에서 색인 위 치 를 표시 하고 색인 위치의 시작 값 은 0 입 니 다.기본적으로 Query 와 Criteria 인 터 페 이 스 는 검색 결과 의 첫 번 째 대상, 즉 색인 위치 가 0 인 대상 부터 검색 합 니 다. 
–setMaxResult(int max Results): 최대 검색 대상 수 를 설정 합 니 다.기본적으로 Query 와 Criteria 인 터 페 이 스 는 검색 결과 의 모든 대상 을 검색 합 니 다. 
페이지 별 조회:
HQL 검색 방식 사용 :
Query query = session.createQuery("from 
Customer c 
order by c.name asc"); 
query.setFirstResult(0); 
query.setMaxResults(10); 
List result = query.list();

QBC 검색 방식 사용
Criteria criteria = session.createCriteria( 
Customer.class); 
criteria.addOrder( //criteria             
Order.asc("name") ); 
criteria.setFirstResult(0); 
criteria.setMaxResults(10); 
List result = criteria.list()

  위 에서 우 리 는 hql 구문 과 QBC 두 가지 조회 방식 을 대체적으로 알 게 되 었 습 니 다. 구체 적 인 용법 은 우리 가 살 펴 보 겠 습 니 다. 먼저 HQL 을 보 겠 습 니 다.
우리 가 평소에 조회 할 때 HQL 문 구 는 항상 "from" 입 니 다. "클래스 이름", 이렇게 조회 합 니 다. 이것 은 우리 가 대응 하 는 대상 의 모든 속성 을 조회 하고 자 하 는 것 입 니 다.우리 가 전체 실체 류 의 대상 이 아니 라 실체 류 의 몇 개의 필드 를 조회 하고 싶 을 때 우 리 는 앞에서 생략 한 hql 문 구 를 추가 해 야 한다.예 를 들 어 HQL 문장: select s.name,s.age from student s ,그 는 student 표 의 name 과 age 속성 만 조회 하고 다른 것 은 원 하지 않 습 니 다.이 때 query 를 호출 합 니 다.List () 방법 은 하나의 대상 이 아 닙 니 다. 대상 의 일부 속성 만 조회 하기 때 문 입 니 다.그럼 알 아 본 list 집합 은 뭐 예요?사실 list 대상 에 있 는 모든 요 소 는 object 대상 의 배열 이 고 모든 배열 은 조회 대상 의 몇 개의 필드 를 포함 합 니 다.이 데이터 들 은 단지 유리 한 데이터 일 뿐이다.우리 가 얻 고 싶 은 필드 데 이 터 는 아래 방식 으로 옮 겨 다 닐 수 있다.
코드 는 다음 과 같 습 니 다:
상기 상황 은 다른 방식 으로 해결 할 수 있 지만 이런 방식 으로 성공 적 으로 실 행 된 전 제 는 student 실체 류 에서 name 과 age 두 가지 속성 을 포함 하 는 구조 방법 을 구 조 했 기 때문이다.
Query query = session.createQuery("select new Student(s.name, s.age) from Student s");
List list = query.list();
for(int i = 0; i  
  





        HQL , student , , HQL 。 sql 。

        HQL :from Team t  join t.student; team studenton , ? hbmonsql

Hibernate


          Hibernate sqlsql_format true, , sql

          , , , ? studentteam。 ,hibernatelistobject 。 , hql student team , :

Query query = session.createQuery("from Team t join t.students");
List list = query.list();
for(int i = 0; i  
  



        , true, , session liststudentsession

hql

hibernate hqlHQLHQL , ,hibernate sethql


Team team=session.get(Team.class,1);
Query query = session.createQuery("from student s where s.team=:team and s.age>20");

       이곳 에서 우리 가 조회 하 는 조건 은 학생 들 이 대응 하 는 team 대상 이 방금 조회 한 대상 과 같다 는 것 이다.hibenate API 에서 이 곳 의 인 자 를 설정 하 는 두 가지 방식 을 제공 합 니 다. 다음은 다음 과 같 습 니 다.
1. 첫 번 째 종류:
query.setParameter("team",team,Hibernate.entity(Team.class));이 방식 은 세 개의 매개 변수 가 필요 합 니 다. 첫 번 째 매개 변 수 는 지정 한 매개 변수 입 니 다. 여 기 는 위의 hql 문장의 team 매개 변 수 를 설정 하고 두 번 째 매개 변 수 는 매개 변수의 값 을 설정 하 는 것 입 니 다. 세 번 째 매개 변 수 는 Type 형식의 데이터 입 니 다. hibenate 에서 hibernate 류 를 제 공 했 습 니 다. 그 안에 대량의 정적 도구 방법 이 포함 되 어 있 는데 그 중에서 Type 대상 을 얻 는 방법 enity 가 있 습 니 다.
2. 두 번 째:
query. setEntity ("team", team) 는 이 방법 이 비교적 간단 하고 실 용적 입 니 다. 우 리 는 대부분 이 방법 을 사용 합 니 다. 그 는 기본 데이터 형식 을 설정 하 는 set 방법 과 비교적 잘 알 고 있 습 니 다.매개 변수 이름과 매개 변수 값 을 직접 설정 하면 OK 입 니 다.
주의해 야 할 것 은 이곳 의 hql 문 구 는 두 대상 이 같 는 지 비교 하 는데 사실은 hibenate 밑 에 있 는 것 은 대응 하 는 외 키 연결 로 전환 된다.
필터:
hibenateAPI 는 필터 역할 을 하 는 방법 을 제공 합 니 다. 이 방법 은 createFiter (object) 입 니 다. collection,string s) 방법, 그 는 두 개의 매개 변 수 를 가지 고 있 습 니 다. 첫 번 째 매개 변 수 는 여과 할 대상, 즉 집합 대상 을 말 합 니 다. 두 번 째 매개 변 수 는 여과 문 구 를 말 합 니 다. 사실은 hql 문장의 일부분 입 니 다. 예 를 들 어 다음 코드 입 니 다.
Query query = session.createFilter(team.getStudents(), "where age > 20");
List list = query.list();

QBC: 진정한 대상 을 대상 으로 데이터 베 이 스 를 조작 하 는 방식 으로서 그 내부 에 대량의 API 가 데이터 베 이 스 를 조작 하고 조건 을 제공 합 니 다. 다음은 구체 적 인 사례 에 따라 API 의 용법 을 살 펴 보 겠 습 니 다.
//      12-30 
 Criteria criteria = session.createCriteria(Student.class).add(
 Restrictions.between("age", new Integer(12), new Integer(30)));
//  name    ,   t   
 Criteria criteria = session.createCriteria(Student.class).add(
Restrictions.like("name", "t%"));
//      ,     "jerry", "spark", "tom"    
String[] names = { "jerry", "spark", "tom" };
Criteria criteria = session.createCriteria(Student.class).add(
        Restrictions.in("name", names));
//           , age  , cardid  
Criteria criteria = session.createCriteria(Student.class).addOrder(
Order.asc("age")).addOrder(Order.desc("cardId"));
//      
List list = criteria.list();

좋은 웹페이지 즐겨찾기