You are on page 1of 32

Ni dung trnh by

Hibernate Query Language (HQL)

HQL from
HQL select
HQL aggregate function

HQL where
HQL - Expression
HQL order by

HQL group by & having


HQL sub query
2

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

JDBC - SQL
JDBC
truy
thao
bng

s dng cc cu lnh SQL thc hin


vn d liu truy vn d liu v cc
tc cp nht nh thm, xa, sa trn
d liu.

thao tc tt cc cu lnh SQL cn quan


tm n cc bng, cc dng, cc ct v mi
quan h gia cc bng v c bit l h
qun tr c s d liu ang lm vic.
Kt qu tr v ca cu lnh truy vn l
danh sch cc dng d liu.

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

Hibernate - HQL
Hibernate cung cp cc API cho php thc hin
tc thao tc cp nht nh thm, xa, sa.
Hibernate cung cp ngn ng truy vn rt mnh
c gi l Hibernate Query Language (HQL).
HQL c lp h qun tr c s d liu v c
Hibernate thng dch sang SQL tng ng trong
qu trnh thc thi.
HQL l ngn ng truy vn theo hng i tng.
Kt qu truy vn l i tng
Hibernate s dng cc lp i tng v cc
thuc tnh thay cho cc bng v cc ct.
4

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL Phn bit hoa thng


HQL khng phn bit thng hoa ngoi tr

Tn cc lp i tng
Cc thuc tnh trong lp i tng
V d 2 cu truy vn ging nhau
select s from Sach s <-> SELECT s FROM Sach s
Select s From Sach s <-> SELECT s FROM Sach s

V d 2 cu truy vn khc nhau


select s from sach s <-> SELECT s FROM Sach s
Select s From SACH s <-> SELECT s FROM Sach s

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL Mnh from


Ly tt c c i tng danh mc

from DanhMuc
select dm from DanhMuc dm
select dm from DanhMuc as dm

Ly tt c i tng sch
from Sach
select s from Sach s

select s from Sach as s

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL Mnh from ly tt c i tng


1
2
3

String hql = "from Sach";


Query query = session.createQuery(hql);
List<Sach> ds=query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL Mnh from


1
2
3
4
5

- phn trang

String hql = "from Sach";


Query query = session.createQuery(hql);
query.setFirstResult(3);
query.setMaxResults(5);
List<Sach> ds=query.list();

- Ly t v tr th n (tnh t 0)
setFirstResult (int n)
- ly ti a m i tng
setMaxResults (int m)
- Tng t trong MYSQL
LIMIT N, M

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - join
cross join

inner join hoc join


left join hoc left outer join
right join hoc right outer join

left join fetch hoc left outer join fetch


right join fetch hoc right outer join fetch

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL cross join


Thc hin tch cartesian (cn gi l
cross join)
from Sach, DanhMuc
from Sach s, DanhMuc dm

select s,dm from Sach s, DanhMuc dm


Kt qu tr v l mt ArrayList<Object []>
S lng phn t = s lng danh mc * s
lng sch

10

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL cross join


1
2
3
4
5
6
7
8

11

String hql = "from Sach s, DanhMuc dm";


Query query = session.createQuery(hql);
ArrayList<Object[]> ds = query.list();
for(int i=0; i<ds.size(); i++){
Object[] objs=ds.get(i);
Sach s=(Sach)objs[0];
DanhMuc dm=(DanhMuc)objs[1];
}

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL

inner join

S lng danh mc: 4

S lng sch: 10 (u thuc danh mc)


inner join
from DanhMuc dm

inner join dm.sachs


Kt qu
S lng: 10

12

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL

left join

S lng danh mc: 4 (2 danh mc khng c sch)

S lng sch: 10 (u thuc danh mc)


Left join
from DanhMuc dm

left join dm.sachs


Kt qu
S lng: 12

2 danh mc khng c
sch no thuc v
13

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL

right join

S lng danh mc: 4

S lng sch: 10 (u thuc danh mc)


Right join
from DanhMuc dm

right join dm.sachs


Kt qu
S lng: 10

14

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL

left join fetch

S lng danh mc: 4 (c

S lng sch: 10 (u thuc danh mc)


Left join fetch
from Sach s

left join fetch

s.danhMuc
Kt qu
S lng: 10

15

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL

right join fetch

S lng danh mc: 4 (c

S lng sch: 10 (u thuc danh mc)


right join fetch
from Sach s

right join fetch

s.danhMuc
Kt qu
S lng: 10

16

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - select
1
2
3

17

String hql = "select s.danhMuc from Sach s";


Query query = session.createQuery(hql);
List<DanhMuc> ds=query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - select
1
2
3

18

String hql = "select s.danhMuc.tenDanhMuc from Sach s";


Query query = session.createQuery(hql);
List<String> ds=query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - select
1
2
3
4
5
6
7
8
9

19

String h ="select s.maSach, s.tenSach, s.danhMuc from Sach s";


Query query = session.createQuery(h);
List<Object[]> ds=query.list();
for(int i=0; i<ds.size(); i++){
Object[] objs=ds.get(i);
String maSach=(String)objs[0];
String tenSach=(String)objs[1];
DanhMuc dm=(DanhMuc)objs[2];
}

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - select
1
2
3
4

20

String hql ="select distinct s.danhMuc.tenDanhMuc from


Sach s";
Query query = session.createQuery(hql);
List<String> ds=query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - select
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21

package pojo;
public class MyClass {
private String maSach;
private String tenSach;
private DanhMuc danhMuc;
public MyClass() {
}
public MyClass(String maSach, String tenSach,
DanhMuc danhMuc) {
this.maSach = maSach;
this.tenSach = tenSach;
this.danhMuc = danhMuc;
}
//Getters & Setters
}
Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - select
1
2
3
4
5
6
7
8
9

22

String hql =
"select new pojo.MyClass (s.maSach, s.tenSach, s.danhMuc)
from Sach s";
Query query = session.createQuery(hql);
List<MyClass> ds=query.list();
for(int i=0; i<ds.size(); i++){
MyClass my=ds.get(i);
String maSach=my.getMaSach();
String tenSach=my.getTenSach();
DanhMuc dm=my.getDanhMuc();
}

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - Aggregate functions


avg

min
max
count

sum

23

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - Aggregate functions


1
2
3
4
5
6
7
8
9
10
11
12
13

24

String hql =

" select avg(s.giaBan) as GiaTrungBinh,"


+ " count(*) as SoLuongDauSach,"
+ " min(s.giaBan) as GiaBanThapNhat,"
+ " max(s.giaBan) as GiaBanCaoNhat, "
+ " sum(s.soLuong) as TongSoLuongSach "
+ " from Sach s";
Query query = session.createQuery(hql);
Object[] objs = (Object[]) query.uniqueResult();
double giaTrungBinh=(Double)objs[0];
long soLuongDauSach=(Long)objs[1];
double giaBanThapNhat=(Double)objs[2];
double giaBanCaoNhat=(Double)objs[3];
long tongSoLuongSach=(Long)objs[4];

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - where

25

1
2
3
4
5

String tenSach="Java";
String hql = "from Sach s where s.tenSach like :tenSach";
Query query = session.createQuery(hql);
query.setString("tenSach", "%"+tenSach+"%");
ArrayList<Sach> ds=query.list();

1
2
3
4
5
6
7
8
9

String tenDanhMuc="Java";
String giaBan=20000;
String hql="from Sach s
where s.danhMuc.tenDanhMuc=:tenDanhMuc
and s.giaBan>:giaBan"
Query query = session.createQuery(hql);
query.setString("tenDanhMuc", tenDanhMuc);
query.setString("giaBan", giaBan);
ArrayList<Sach> ds=query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - Expression
+, -, *, /

=, >=, <=, <>, !=, like


and, or, not
( )

in, not in, between, is null, is not null,


is empty, is not empty, member of, not
member of
case ... when ... then ... else ... end

26

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL - Expression
concat(...,...)

current_date(), current_time(),
current_timestamp()
second(...), minute(...), hour(...), day(...),
month(...), year(...)
substring(), trim(), lower(), upper(),
length(), locate(), abs(), sqrt(),
bit_length(), mod()

coalesce() , nullif()
str(), ...
27

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL order by
1
2
3
4
5
6
7
8
9

28

String tenSach="Java";

String hql = " from Sach s";


hql=hql
+" where s.tenSach like :tenSach";
hql=hql
+" order by s.tenSach desc";
Query query = session.createQuery(hql);
query.setString("tenSach", "%"+tenSach+"%");
ArrayList<Sach> ds = query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL group by & having


1
2
3
4
5
6
7

29

String hql
hql = hql
hql = hql
hql = hql

=
+
+
+

"
"
"
"

select s.danhMuc, sum(s.soLuong)";


from Sach s";
group by s.danhMuc";
having sum(s.soLuong)>100";

Query query = session.createQuery(hql);


ArrayList<Object[]> ds = query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HQL subquery
1
2
3
4
5
6
7
8
9

30

String hql = " select s";


hql = hql
+ " from Sach s";
hql = hql
+ " where s.giaBan > ";
hql = hql
+ "
(";
hql = hql
+ "
select avg(s.giaBan)";
hql = hql
+ "
from Sach s";
hql = hql
+ "
)";
Query query = session.createQuery(hql);
ArrayList<Sach> ds = query.list();

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

Ti liu tham kho


Nguyn Hong Anh, Tp bi ging mn chuyn
Java, 2011
http://docs.jboss.org/hibernate/core/3.5/re
ference/en/html/queryhql.html

31

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

HI V P

32

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2012

You might also like