티스토리 뷰

Springi Hibernate 8-8 HQL(Hibernate Query Language)

HQL의 기본 개념

Hibernate에서 사용하는 SQL? 문법, 형식이 SQL과 유사함.

검색 대상이 테이블이 아니라 영속 객체임.

SQL 구문 select e.employee_id, e.first_name, e.age, e.address
from employees e
where e.deptno = 101;
HQL 구문 select e.employeeId, e.firstName, e.age, e.address
from Employee e
where e.deptNo = 101;

Employee 영속 객체에서 검색함.

HQL 기반의 기본 검색

select

기본 쿼리

Query query = session.createQuery("from Order");

List<Order> orderList = query.list();

for (Order order : orderLIist) {

System.out.println("주문 ID : " + order.getId() +

", 주문상태" + order.getStatus());

}

전체 경로 or Class Name

from ecampus.hql.entity.Member

또는

from Member

SQL과 마찬가지로 Alias 사용 가능

distinct 사용 가능

public Collection<Customer> findDistinctCustomerOfAllOrder(){

String hql = "select distinct cust from Customer cust";

Query query = session.createQuery(hql);

return query.list();

}

where 절과 파라미터 매핑

where 절 형식은 SQL과 대부분 동일함.

파라미터 사용방법도 SQL과 동일함. -> ?

단 파라미터 인덱스는 0부터 출발

public ArrayList<Cutomer> findByCustomerCity(String cityName){

Query query = session.createQuery("from Customer c where c.name = ?");

query.setParameter(0, cityName);

return query.list();

}

where 절과 파라미터 매핑

public ArrayList<Cutomer> findByCustomerCity(String cityName){

Query query=session.createQuery("from Customer c where c.cityName=:cityName");

query.setParameter("cityName", "Seoul", Hibernate.STRING);

return query.list();

}

검색 결과를 임의의 객체로 리턴하기

검색 결과를 개발자가 지정하는 임의의 객체로 리턴할 수 있음.

public class Result {

private String cName;

private String eName;

//Setter, Getter, Constructor 생략

}

public ArrayList findCustomerInfo(){

Query query=session.createQuery("select new ecampus.hql.entity.Result(c.name as cName, e.name as eName) from Customer c, Employee e");

List list=query.list();

return list;

}

검색 결과에 대한 페이징 처리

일반적인 방법 : 페이징 하기 위한 SQL 쿼리 작성(: SubQuery)

간단한 HQL로 해결

select num seq, last_name, first_name, salary

from (select rownum num,last_name, first_name, salary

from (select * from employees)

)

where num >= ? and num <= ?

public Collection<Employee> findAllEmployee(int max, int index){

Query query = session.createQuery("from Employee emp");

query.setMaxResults(max);

query.setFirstResult(index);

return query.getResultList();

}

HQL 연산자

연산자 설명
. 객체의 변수에 접근 시 이용
+, -, *, / 산술 연산자
=, <>, <, >, <=, >=,
between, not between,
like, not like
in, not in
is null, is not null
조건 연산자
is empty, is not empty,
is member of, not member of
Collection 에 사용되는 연산자, is empty Collection 의 크기가 0 인 경우이며, member of Collection 에 특정 Type 의 원소가 포함되었는지를 판단할 때 사용
not , and, or 논리 연산자

GROUP BY

SQL 과 동일한 방법

Having

SQL 과 유사함.

select cat.color, sum(cat.weight), count(cat)

from Cat cat

group by cat.color

having cat.color in ('white', 'black')

from Customer cust

group by cust.id

having size(cust.orderlist) > 4

'Note' 카테고리의 다른 글

장기요양등급판정의 부정확성  (0) 2023.04.01
세포주기 조절  (0) 2023.03.31
Springi Hibernate 8-9 Hibernate와 Spring 연동  (0) 2023.03.29
고위험병원체의 종류  (0) 2023.03.12
마케팅관리, 글로벌화의 개념과 성격  (0) 2023.03.12
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함