티스토리 뷰
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 |