티스토리 뷰

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

'It' 카테고리의 다른 글

JDBC / 오라클 연동  (0) 2023.03.04
스프링 개발환경구축 (1) JDK 64bit 설치 및 환경변수 설정  (0) 2023.03.03
법의종류  (0) 2023.03.01
외부경제에 의한 비효율의 교정  (0) 2023.02.28
외부효과에 대한 공공정책  (0) 2023.02.27
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함