You are on page 1of 32

Upload by Cafeitvn.

com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

HQL cross join


1 2 3 4 5 6 7 8 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]; }

11

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

HQL

left join fetch

S lng danh mc: 4 (c

S lng sch: 10 (u thuc danh mc)


Left join fetch from Sach s Kt qu S lng: 10 left join fetch

s.danhMuc

15

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

Upload by Cafeitvn.com

HQL

right join fetch

S lng danh mc: 4 (c

S lng sch: 10 (u thuc danh mc)


right join fetch from Sach s Kt qu S lng: 10 right join fetch

s.danhMuc

16

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

Upload by Cafeitvn.com

HQL - select
1 2 3 String hql = "select s.danhMuc from Sach s"; Query query = session.createQuery(hql); List<DanhMuc> ds=query.list();

17

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

Upload by Cafeitvn.com

HQL - select
1 2 3 String hql = "select s.danhMuc.tenDanhMuc from Sach s"; Query query = session.createQuery(hql); List<String> ds=query.list();

18

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

Upload by Cafeitvn.com

HQL - select
1 2 3 4 5 6 7 8 9 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]; }

19

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

Upload by Cafeitvn.com

HQL - select
1 2 3 4 String hql ="select distinct s.danhMuc.tenDanhMuc from Sach s"; Query query = session.createQuery(hql); List<String> ds=query.list();

20

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

HQL - select
1 2 3 4 5 6 7 8 9 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(); }

22

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

Upload by Cafeitvn.com

HQL - Aggregate functions


avg

min
max count

sum

23

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

Upload by Cafeitvn.com

HQL - Aggregate functions


1 2 3 4 5 6 7 8 9 10 11 12 13 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];

24

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

Upload by Cafeitvn.com

HQL - where
1 2 3 4 5 1 2 3 4 5 6 7 8 9 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(); 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();

25

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

HQL order by
1 2 3 4 5 6 7 8 9 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();

28

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

Upload by Cafeitvn.com

HQL group by & having


1 2 3 4 5 6 7 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();

29

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

Upload by Cafeitvn.com

HQL subquery
1 2 3 4 5 6 7 8 9 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();

30

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

Upload by Cafeitvn.com

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

Upload by Cafeitvn.com

HI V P
Upload by Cafeitvn.com

32

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

You might also like