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