Spring MVC

Embed Size (px)

Citation preview

Spring MVCMc lc1 Hibernate ................................................................................................................................ 21.1 1.2 ORM (Objet relation Mapping).............................................................................................. 2 Kin trc Hibernate .................................................................................................................... 3 Interface ............................................................................................................................... 3 Mt s interface chnh ........................................................................................................ 4 Cc interface callback......................................................................................................... 6 Type ...................................................................................................................................... 6 Cc interface m rng ........................................................................................................ 7

1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3

Truy vn trong Hibernate - HQL (Hibernate Query Language) ........................................... 7 nh ngha............................................................................................................................ 7 Cc cch thc hin vic truy vn trong Hibernate .......................................................... 7 Cch thc thi cu truy vn ................................................................................................. 8 Cc thnh phn trong cu truy vn .................................................................................. 8

1.3.1 1.3.2 1.3.3 1.3.4

2

Spring MVC ......................................................................................................................... 132.1 2.2 M hnh MVC trong ng dng web ........................................................................................ 13 Gii thiu v Spring framework .............................................................................................. 14 IoC(Inversion of Control) ................................................................................................. 15 DI(Dependency Injection) ................................................................................................ 15

2.2.1 2.2.2 2.3 2.4

Gii thiu v Spring MVC........................................................................................................ 16 Mt s thnh phn quan trng trong Spring MVC ............................................................... 17 DispatcherServlet .............................................................................................................. 17 Controllers ......................................................................................................................... 21 Handler mappings ................................................................................................................. 21 Mt s thnh phn khc ............................................................................................................. 23 Hot ng ca Spring MVC ..................................................................................................... 23

2.4.1 2.4.2 2.4.3 2.4.4 2.5

3

JSTL (JSP Standard Tag Library) .................................................................................... 243.1 3.2 S g ................................................................................................................................. 24 ...................................................................................................... 24 Cc th vin th ca S

3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 h

Core ction g

cc chc n ng sau .............................................................................. 25

Formatting Action: ........................................................................................................... 25 guy n t c thit k .................................................................................................................. 26 ui c t t n .................................................................................................................. 26 Scoped Variables vs. Scripting Variables ....................................................................... 26 Cc thuc t nh ng .......................................................................................................... 26 i .............................................................................................................................. 26 eneral-Purpose and Conditional ................................................................................... 26

3.5

h Conditiona ................................................................................................................ 28

1 Hibernate Trong nhiu nm, persistence (vic lu tr mt i tng ln a hay mt thit b lu tr bn vng khc) l mt vn gy nhiu tranh ci trong cng ng Java: Liu persistence l vn c gii quyt bi cng ngh quan h v cc m rng (v d nh cc stored procedure) hay persistence l mt vn ln cn phi c gii quyt bi cc m hnh thnh phn Java c bit nh l cc EJB entity bean; Ta nn code tay ngay c cc thao tc c bn nht nh create, read, update, delete trong SQL hay JDBC, hay cc cng vic ny nn c t ng ha; Lm th no h thng t c tnh kh chuyn i nu mi h thng qun tr c s d liu (DBMS) li c mt hnh thi ngn ng ca ring n (c cc token, syntax, semantic ring); C nn t b SQL hon ton v chuyn sang mt cng ngh c s d liu mi, v d nh cc h thng c s d liu i tng. Cuc tranh lun vn cn tip tc nhng hin nay c mt gii php nhn c s chp thun ngy cng tng. Gii php ny c tn gi l nh x i tng/quan h (ORM object/relational mapping). Hibernate l mt s hin thc ORM m ngun m. Hibernate l mt d n vi mc tiu tr thnh mt gii php hon chnh cho vn qun l d liu persistent trong Java. N lm trung gian cho cc tng tc ca ng dng vi mt c s quan h, gii phng nh pht trin h c th tp trung vo cc vn nghip v. Hibernate kkng phi l mt gii php bt buc (non-intrusive solution). Ngha l ta khng cn phi theo cc lut c th cho Hibernate v cc design pattern khi vit cc logic nghip v v cc class persistent. Do Hibernate tch hp tt vi hu ht cc ng dng mi v ang tn ti m khng yu cu nhng thay i i vi phn cn li ca chng trnh. 1.1 ORM (Objet relation Mapping) Mt nh x i tng/quan h (object/relational mapping) l mt s thng tr t ng (persistence) ca cc i tng thuc mt ng dng Java trong cc table thuc mt

c s d liu quan h bng cch s dng cc metadata m t s nh x gia cc i tng v c s d liu. V bn cht, ORM, lm vic thng qua s chuyn i d liu t mt dng th hin ny sang mt dng khc. Mt gii php ORM cu to bi bn phn sau: Mt API thc hin cc giao thc CRUD c bn trn cc i tng ca cc class persistent. Mt ngn ng hoc API thc hin cc cu truy vn trn cc class v cc thuc tnh ca class. Mt tin ch xc nh cc nh x metadata. Mt k thut cho vic hin thc ORM tng tc vi cc i tng giao dch thc hin dirty checking, lazy association fetching v cc chc nng ti u khc. 1.2 Kin trc Hibernate 1.2.1 Interface Cc interface lp trnh (programming interface) l iu u tin cn bit v Hibernate s dng n trong tng persistenceca ng dng ca bn. Mt mc tiu chnh ca thit k API l gi cho cc interface gia cc thnh phn phn mm cng gn nhau cng tt. Tuy nhin trong thc t, cc ORM API khng h t. Tuy vy, ta cng khng cn phi hiu tt c interface Hibernate mt lc. Hnh 1.1 m t cc vai tr ca ca cc interface Hibernate quan trng nht trong tng nghip v (business layer) v tng persistence (persistence layer). Tng nghip v nm trn tng persistence, bi v tng nghip v hot ng nh mt client ca tng persistence trong mt ng dng phn lp truyn thng. Lu rng, mt s ng dng n gin c th khng tch bit logic nghip v khi logic persistence. iu ch lm n gin lc hn.

Hnh 1.1. Tng quan v Hibernate API trong kin trc phn tng Cc interface Hibernate c th hin trn hnh trn c th c phn thnh cc loi chnh sau: Cc interface c cc ng dng gi thc hin cc thao tc c bn CRUD v cc lnh truy vn. Chng bao gm Session, Transaction v Query. Cc interface c code c s ng dng gi cu hnh Hibernate, trong quan trng nht l interface Configuration. Cc interface Callback l cc interface cho php ng dng phn hi li cc s kin (event) xy ra bn trong Hibernate, gm cc interface nh Interceptor, Lifecycle v Validatable. Cc interface gip m rng cc chc nng nh x ca Hibernate, gm cc interface nh UserType, CompositeUserType, v IdentifierGenerator. Cc interface ny c hin thc bng code c s ng dng. Hibernate s dng cc API Java c sn, bao gm JDBC, JTA, JNDI. JDBC cung cp mt tru tng ha ban u cc chc nng thng dng ca c s d liu quan h, cho php hu ht cc c s d liu vi mt JDBC driver c Hibernate h tr. JNDI v JTA cho php Hibernate tch hp vi J2EE server ng dng. 1.2.2 Mt s interface chnh S dng cc interface ny, bn c th lu tr v rt trch cc i tng persistent v iu khin cc transaction. - Session interface:

o Mt thc th Session t tn ti nguyn (c tnh lightweight), d dng to v hy. c im ny kh quan trng v trong mt ng dng cn to v xa cc session mi lc, c th l trn mi request. Cc Hibernate session khng c tnh an ton v thread (not threadsafe) nn c thit k ch c mt thread s dng mt thi im. o nh ngha ca Hibernate v mt session l mt ci gia connection v transaction. C th hnh dung v session nh mt b m hoc mt tp hp cc i tng c np vo c lin quan n mt n v cng vic. Hibernate c th d tm ra nhng thay i cc i tng trong n v cng vic ny. N cng l interface cho cc hm lin quan n persistent, v d nh l vic lu v rt trch i tng. SessionFactory interface o ng dng to c mt thc th Session t mt SessionFactory. SessionFactory khng c tnh lighweight. N c dng chung cho nhiu thread ng dng. in hnh l c mt SessionFactory cho ton ng dng, c to trong phn khi to ng dng. Tuy nhin, nu ng dng cn truy xut nhiu database bng cch s dng Hibernater th cn mt SessionFactory cho mi database. o SessionFactory lu li cc cu lnh SQL to v cc siu d liu (metadata) nh x khc m Hibernate s dng thi im chy. N cng lu cc d liu tng c c (c cache li) trong mt n v cng vic v c th c s dng trong mt n v cng vic trong tng lai (ch nu cc nh x class v collection xc nh rng cache cp hai ny l cn thit). Configuration interface i tng Configuration c s dng nh cu hnh v boostrap Hibernate. ng dng s dng mt thc th Configuration xc nh v tr ca cc ti liu nh x (mapping document) v cc thuc tnh xc nh Hibernate v sau to ra SessionFactory.

-

-

Transaction interface o Interface Transaction l mt API ty chn. Ngha l cc ng dng Hibernate c th khng s dng interface ny, thay vo n s qun l cc transaction bng code c s ca ring n. Mt Transaction interface tch bit (tru tng ha) code ng dng khi s hin thc transaction bn di (c th l transaction JDBC, UserTransaction JTA hoc transaction CORBA) cho php ng dng iu khin cc bin transaction (transaction boundary cho php xc nh khi no mt transaction bt u v kt thc) thng qua mt API nht qun.

o iu ny gip cho cc ng dng Hibernate c tnh kh chuyn trn cc mi trng thc thi v cc container khc nhau. Query v Criteria interface o Interface Query cho php thc hin cc truy vn n cc c s d liu v iu khin vic cc truy vn ny c thc thi nh th no. Cc truy vn c vit bng HQL (Hibernate Query Language) hoc bng ngn ng SQL nguyn thu. Mt thc th Query c dng bind cc thng s truy vn, gii hn ca s kt qu tr v bi truy vn v nhim v cui cng l thc thi truy vn. o Interface Criteria cng tng t nh vy, n cho php to v thc thi cc truy vn chun hng i tng. o Mt thc th Query c tnh lightweight v khng th s dng ngoi Session to ra n. 1.2.3 Cc interface callback Interface Callback cho php cc ng dng nhn mt thng bo khi c mt s kin xy ra i vi mt i tng v d nh khi i tng c np vo, c lu hoc b xo. Cc ng dng Hibernate khng cn hin thc nhng callback ny nhng chng s c ch cho vic hin thc cc loi chc nng tng qut, nh l to ra cc bn ghi kim ton (audit record). Gm cc interface nh: - Lifecycle v Validatable: cho php mt i tng persistent phn hi cc s kin lin quan n vng i (lifecycle) persistent ca ring n. - Interceptor cho php ng dng x l cc callback m khng buc cc class persistent hin thc cc API c trng ca Hibernate (Hibernate-specific API). Cchin thc interface Interceptor c truyn n cc thc th persistent nh cc thng s. 1.2.4 Type Mt thnh phn c bn v rt mnh ca kin trc ny nh ngha ca Hibernate v Type. Mt i tng Type ca Hibernate nh x mt kiu ca Java n mt kiu ct ca c s d liu (database column type). Kiu ny c th ko di qua nhiu ct. Tt c cc thuc tnh persistent ca class persistent, bao gm cc quan h (association), c mt kiu Hibernate tng ng. iu ny lm cho Hibernate tr nn c bit linh hot v d m rng. C rt nhiu kiu Hibernate c xy dng sn, bao gm tt c cc kiu gc caJava (Java primitive) v nhiu class JDK, bao gm cc kiu cho java.util.Currency, java.util.Calendar, byte[] v java.io.Serializable.

Hn th na, Hibernate cn h tr cho kiu tu chnh do ngi dng t nh ngha (user-defined custom type). Cc interface UserType v CompositeType cho php thm vo kiu ring ca ngi s dng. c tnh ny gip iu khin cc class ng dng c s dng rng ri nh l Address, Name, MonetaryAmount mt cch thun tin.Cc kiu tu chnh c xem nh l mt c tnh chnh ca Hibernate v c khuyn khch dng.

1.2.5 Cc interface m rng Nhiu chc nng m Hibernate cung cp c kh nng nh cu hnh. iu ny cho php ta chn gia nhiu chin lc c xy dng sn. Khi cc chin lc ny khng hiu qu, Hibernate cho php thm vo cc hin thc ca ring ngi dng bng cch hin thc mt interface. Cc im m rng gm c: To kho chnh: interface IdentifierGenerator. H tr hnh thi ngn ng SQL: class tru tng Dialect. Cc chin lc lu tr m cache: interface Cache v CacheProvider. Qun l kt ni JDBC: interface ConnectionProvider. Qun l transaction: interface TransactionFactory, Transaction v TransactionManagerLookup. Cc chin lc ORM: phn cp interface ClassPersister. Cc chin lc truy cp thuc tnh: interface PropertyAccessor. To proxy: interface ProxyFactor. 1.3 Truy vn trong Hibernate - HQL (Hibernate Query Language) 1.3.1 nh ngha Hibernate cng c mt ngn ng truy vn cho ring n, tn l Hibernate Query Language, gi tt l HQL. V mt cu trc HQL cng tng t nh SQL vi cc mnh SELECT, FROM v WHERE. HQL cng h tr subselect nu c s d liu bn di cng h tr. Nhng tht s HQL l ngn ng truy vn hng i tng vi cc khi nim v tha k (inheritence), tnh a hnh (polymorphism) v quan h association). 1.3.2 Cc cch thc hin vic truy vn trong Hibernate Thc ra trong Hibernate ta c th dng n 3 cch biu din cu truy vn. - Cch th nht l s dng HQL: V d: session.createQuery(from Category c where c.name like Laptop%); - Cch th hai l s dng hm API Criteria cho truy vn, gm truy vn theo chun (query by criteria, QBC) v truy vn theo v d (query by example, QBE). V d: session.createCriteria((Category.class).add(Expression.like("name","Lapto p%")); - Cch th ba l s dng cu SQL trc tip vi s nh x t ng tp kt qu thnh cc i tng.

V d: session.createSQLQuery("select {c.*} from CATEGORY {c} where NAME like 'Laptop%'","c",Category.class); Trong ti liu ny chng ta ch cp n cch truy vn u tin. Nu cn tham kho thm v hai cch cn li, cc bn c th tham kho thm ti liu Hibernate in Action, chng 7 Retrieving objects efficiently. 1.3.3 Cch thc thi cu truy vn Interface cho vic truy vn (query interface) to mt thc th Query mi ta c th gi hm createQuery(). V d: Query hqlQuery = session.createQuery("from User");

- Phn trang kt qu Phn trang l mt k thut thng c s dng. Ngi s dng c th nhn thy kt qu tm kim (v d, tm cc Nhnvin trong mt cng ty) trong mt trang. Trang ny ch hin th gii hn mt tp con ca kt qu (v d, 10 nhn vin) vo mt thi im, v ngi s dng c th chuyn sang trang kt qu k tip hoc quay li trang kt qu trc . Interface Query h tr vic phn trang ca kt qu truy vn: Query query = session.createQuery(from User u order by u.name asc); query.setFirstResult(0); query.setMaxResult(10); Hm setMaxResult(10) gii hn tp kt qu truy vn n 10 i tng u tin c chn ra (select) trong c s d liu. 1.3.4 Cc thnh phn trong cu truy vn - Mnh FROM Mnh FROM cho php xc nh cc i tng s c truy vn. N cng cho php to ra cc b danh cho tn i tng. Gi s ta mun truy vn tt c cc thc th Event c tn l Festival, cu truy vn s nh sau: FROM Event e WHERE e.name = Festival Cu truy vn ny c mt ci tn b danh cho thc th Event l e. Tn b danh ny c th c s dng ging nh trong cu truy vn SQL ngoi tr vic y ta s dng n nh danh cc i tng thay v nh danh cc bng nh trong SQL. Mt im cn lu trong cu truy vn HQL trn l n ang truy vn trn mt thuc tnh ca i tng Event: thuc tnh name. Nh vy l khi truy vn ta khng dng tn ct trong bng m dng tn thuc tnh. Do HQL s dng theo cc khi nim hng i tng, v vy khng th vit tt e.name thnh name c. Tn thuc tnh phi lun c i km vi tn i

tng. R rng l khi s dng HQL, ta khng quan tm n table v column d liu quan h bn di m tp trung vo cc thuc tnh ca cc i tng. Khi truy vn ch lin quan n mt i tng, th ch cn mt i tng List cha cc thc th ca i tng truy vn. Nu cn truy vn nhiu i tng c lin quan n nhau (cc i tng c quan h vi nhau), mnh FROM s cha nhiu i tng: V d: FROM Event e, Attendee a WHERE V danh sch kt qu s cha mt php tch Cartesian cc i tng c truy vn (php tch Cartesian l kt qu ca vic kt hp mi dng ca mt bng vi mi dng ca mt bng khc) m rt c th n khng phi l sn phm ta mong mun. truy vn trn nhiu i tng c lin quan n nhau, ta cn kt hp (join) chng trong mnh FROM. - Kt hp (Join) Trong SQL cng c php JOIN tr v d liu t nhiu bng vi mt cu truy vn duy nht. Tuy nhin php JOIN trong HQL ch kt hp cc thuc tnh ca i tng v cc quan h, trong khi php JOIN trong SQL kt hp cc bng. Nu cn truy vn cc thc th ca i tng Event m mt ngi tham d (Attendee) xc nh sp tham gia, ta phi kt hp thuc tnh attendee vi i tng Event trong cu truy vn: FROM Event e join e.attendee a WHERE a.id = 321 Trong HQL, ta c th kt hp tt c cc quan h (nhiu-mt v mt-mt), cng nh cc tp hp vi i tng c s ca truy vn. i tng c s trong mt truy vn l i tng hin din trong mnh FROM. Trong v d trn, i tng c s l Event. Trong v d trn, ta c th t mt b danh cho quan h c kt hp v truy vn trn cc thuc tnh trong i tng c kt hp. Quy tc t tn cho b danh ca HQL l s dng ch vit thng. o Cc loi kt hp HQL c nhiu kiu kt hp khc nhau, cc kiu kt hp ny u c trong SQL, ch c mt kiu kt hp l ngoi l. Bng sau tm tt cc kiu kt hp Loi kt hp Lut inner join Cc i tng khng ph hp vi nhau mt trong hai u kt hp s b loi b. left (outer) join Tr v tt c i tng u tri ca kt hp. Nu i tng u tri ca kt hp khng c i tng no trng khp (match) u phi ca kt hp th n vn c tr v. right (outer) join Tr v tt c i tng u phi ca kt hp. Nu i tng u phi ca kt hp khng c i tng no trng khp (match) u tri ca kt hp th n vn c tr v. full join Tr v tt c i tng c hai u kt hp, bt k c hay khng i tng trng khp u i din ca kt hp. inner join fetch c s dng truy xut mt i tng kt hp hoc mt tp hp cc i tng bt k c hay khng outer-join hoc lazy property trn quan h. Loi kt hp ny khng c trong SQL.

Loi kt hp mc nh c s dng l inner join. Mun s dng loi khc ta phi xc nh chnh xc loi kt hp trong mnh kt hp (left, right, full). Tt c cc loi kt hp u c loi tng ng trong SQL, ngoi tr inner join fetch. Kt hp mt lazy collection vi inner join fetch s lm cho collection ny c tr v khi populated. V d: FROM Event e INNER JOIN FETCH e.speakers Cu truy vn ny s tr v tt c cc thc th Event vi cc tp hp ca Speakers (ngha l mt thc th Event s c mt tp cc Speaker tng ng vi Event ). Xt s kt hp mt i tng c quan h mt-nhiu vi mt i tng c s: FROM Event e JOIN e.location l WHERE l.name = :name Kt hp thc th Location vi i tng Event cho php truy vn trn cc thuc tnh ca Location, v t c kt qu truy vn hiu qu hn. Gii thch: Nu khng dng php kt hp join ny ta c th c cu truy vn sau: FROM Event e WHERE e.location.name = :name AND e.location.address.state = :state V ta phi duyt qua cc i tng hai ln, mt ln cho tn ca Location v mt ln cho trng thi (state) ca Location, do trnh bin dch truy vn s kt hp thc th Location vi Event hai ln. Kt hp Location vi Event trong mnh FROM s ch phi thc hin php kt mt ln v truy vn cng thc hin hiu qu hn. Cc i tng trong php kt cng c th c tr v trong mnh SELECT ca cu lnh HQL. - Mnh SELECT Mnh SELECT cho php xc nh mt danh sch cc gi tr tr v t cu truy vn. Gi tr tr v c th l ton b i tng, cc thuc tnh xc nh ca i tng v gi tr dn xut t mt truy vn. Gi tr dn xut bao gm kt qu t cc hm chc nng, nh l hm min(), max() v hm count(). Mt c im ca HQL l kh nng tr v cc i tng mi t cc gi tr c chn. o Php chiu: Php chiu l vic chn cc ct xc nh ca d liu tr v t mt truy vn. Gi s thay v tr v ton b i tng Event trong cu truy vn, ta ch mun ly tn ca Event. Vic truy xut ton b i tng ch ly thuc tnh tn th rt khng hiu qu. Thay vo , cu truy vn ch cn truy xut n d liu mong mun: SELECT e.name FROM Event e Cu truy vn ny tr v mt danh sch cc thc th kiu chui cha cc tn ca Event. Nu mun truy xut hai thuc tnh, v d nh ngy bt u v tn ca Event: SELECT e.name, e.startDate FROM Event e Mi phn t trong danh sch tr v l mt array kiu Object (Object[]) cha cc gi tr xc nh. Chiu di ca array Object[] bng vi s ct c yu cu truy xut. Sau y l mt v d v cch thc truy vn v x l truy vn trn nhiu thuc tnh. V d: Session session = factory.openSession(); String query = " select e.name, e.startDate from Event e "; Query query = session.createQuery("query");

List results = query.list(); for (Iterator I = results.iterator(); i.hasNext();) { Object[] row = (Object[]) i.next(); String name = (String) row[0]; Date startDate = (Date) row[1]; // } Lu rng cc gi tr trong array Object[] c th t ging vi th t cc thuc tnh trong cu truy vn. Array cha cc thc th thuc kiu Object, khng c gi tr thuc kiu c bn (gm cc kiu nh int, long, boolean) c th c tr v t mt truy vn dng ny. Gii hn ny cng vn tn ti khi truy vn mt gi tr n, bi v mt List khng th cha cc gi tr kiu c bn. Mt cch thng dng x l vn ny l dng cc i tng gin lc (summary object) cha mt tp con d liu ca i tng. Trong trng hp v d trn, mt i tng gin lc s cha thuc tnh name v startdate ca Event. Khi duyt trn danh sch kt qu, ta s cn mt danh sch cho cc i tng gin lc. C mt cch tt hn gii quyt vn trn. o Tr v cc i tng mi Mnh SELECT c th c s dng to ra cc i tng mi, gi cc gi tr trong cu truy vn. Xt v d sau: select new EventSummary(e.name, e,startDate) from Event e Danh sch kt qu s c tr v theo cc thc th ca i tng EventSummary. D nhin class EventSummary phi c mt constructor tng ng vi constructor c s dng trong cu lnh HQL: EventSummary(String, Date). Phn trc trnh by v nhng thnh phn chnh ca cu truy vn HQL. Phn sau s trnh by v cc hm tp hp (aggregate functions) c sn trong HQL v cch chng c s dng trong mnh SELECT v WHERE. o S dng cc hm Cc hm l cc lnh c bit, tr v mt gi tr c tnh ton. Trong SQL c hai kiu hm: hm kt hp v hm v hng (scalar). Cc hm v hng thng x l trn mt gi tr n v tr v mt gi tr n. Cng c cc hm v hng khng cn i s, nh hm now() hoc CURRENT_TIMESTAMP, c hai u tr v thi gian ca h thng (timestamp). Cc hm tp hp x l trn mt tp cc gi tr tr v gi tr tng kt (summary value). Hibernate h tr nm hm tp hp trong SQL thng dng nht, gm: count (m phn t trong tp hp tha rng buc), avg (tnh tr trung bnh), min (tnh tr nh nht), max (tnh tr ln nht) v sum (tnh tng cc gi tr). Cc hm ny c chc nng tng t nh cc hm tng ng trong SQL. Xt v d sau: SELECT COUNT(e) FROM Event e V d ny tr v s i tng Event c trong c s d liu. m s i tng Event v khng m trng cc i tng ging nhau, s dng t kha distinct: SELECT COUNT(DISTINCT e) FROM Event e

Tt c cc hm tp hp u tr v mt i tng Integer. truy xut kt qu, cch n gin nht l ly gi tr u tin trong danh sch kt qu: Integer count = (Integer) session.find (select count(distinct e) from Event e).get(0); Xt mt v d khc: ly tp hp nhng ngi tham gia (Attendee) cho mt s kin cho trc. Hin nay ly c thng tin ny th code s nh sau: String query = from Event e inner join fetch e.attendees where e.name = :name; Query q = session.createQuery(query); q.setParameter(name, Meeting); Event event = (Event) q.list().get(0); Set attendees = event.getAttendees(); session.close(); C mt cch khc ngn hn nhiu t c tp hp con. Hibernate cung cp hm elements() tr v cc thnh phn ca mt tp hp: SELECT elements(e.attendees) FROM Event e WHERE e.name = :name Cu truy vn tr v mt i tng List cha cc thc th Attendee ng vi s kin Event. Nu s dng php kt hp trong mnh FROM, ta c th s dng alias trong php kt hp lm i s ca hm. Cu truy vn sau cng tng ng vi cu trn: SELECT elements(a) FROM Event e JOIN e.attendees a WHERE e.name =: name Cc hm cng c th c s dng trong mnh WHERE. o Cc thuc tnh c sn ca HQL Cc thuc tnh c sn ca HQL dnh cho cc i tng trong cu truy vn. HQL h tr hai thuc tnh i tng: id v class. Thuc tnh id cho php truy xut n gi tr kha chnh ca mt i tng trong c s d liu. Bt k ta t tn cho thuc tnh id trong i tng v trong nh ngha nh x l g th s dng id trong cu truy vn HQL vn s tr v gi tr kha chnh. V d, nu c mt class vi thuc tnh id c t tn l objectId, ta vn c th s dng thuc tnh id trong cu truy vn HQL: FROM MyObject m WHERE m.id > 50 Ta vn c th s dng thuc tnh objectId nu mun. C th xem thuc tnh Id ca HQL nh mt cch vit gn cho gi tr kha chnh. Thuc tnh class cung cp chc nng tng t. Thuc tnh class gip truy xut n tn class Java ca cc i tng trong c s d liu. iu ny c bit c ch khi ta nh x mt phn cp class trong c s d liu v ch mun tr v cc class thuc mt kiu xcnh. Xt v d sau thy thuc tnh class c s dng nh th no. V d class Attendee c quan h vi class Payment. Class Payment xc nh cch Attendee s tr tin cho cc Event. Payment c hai class con (subclass): CreditCardPayment v CashPayment. Cu truy vn sau s truy xut c tt c Attendee tr bng tin mt: FROM Attendee a JOIN a.payment p WHERE p.class = de.laliluna.CashPayment

Cng ging nh thuc tnh id, ta cng c th tr v thuc tnh class trong lnh SELECT SELECT p.id, p.class FROM Payment p; Cu truy vn tr v tt c cc id v class cho i tng Payment trong mt i tng List gm cc phn t l array Object[]. Tuy nhin, thuc tnh class khng c tr v nh l mt thc th ca java.lang.Class. Thay vo , thuc tnh class l mt thc th java.lang.String, c gi tr l gi tr c xc nh trong thuc tnh discriminor-value (tm dch l gi tr phn bit) trong nh ngha nh x. Thuc tnh class ch c trong phn cp i tng. Ni cch khc l thuc tnh class ch c trong cc i tng c nh x vi mt discriminator-value. Nu truy xut thuc tnh class ca mt i tng khng c discriminator-value s nhn ngoi l QueryException bo rng b phn tch truy vn (query parser) khng th phn tch c thuc tnh class ny. Cc thuc tnh id v class c th c s dng trong mnh SELECT v WHERE. o S dng biu thc Cc biu thc c s dng truy vn cc i tng c thuc tnh tha mn cc tiu chun xc nh. c s dng trong mnh WHERE ca truy vn, cc biu thc h tr hu ht cc ton t thng dng trong SQL. Tm li: Hibernate l mt cng ngh mi gii phng cho ngi pht trin code khi c s d liu quan h thc s bn di. Ngi pht trin ch cn bit cc class nh x t c s d liu bn di m khng phi lm vic vi cc bng (table). 2 Spring MVC 2.1 M hnh MVC trong ng dng web MCV (Model View Controller) l tn mt phng php chia nh mt ng dng thnh ba thnh phn ci t, mi thnh phn ng mt vai tr khc nhau v nh hng ln nhau, l models, views, v controllers.

Models (Tng d liu): l mt i tng hoc mt tp hp cc i tng biu din cho phn d liu ca chng trnh, v d nh cc d liu c lu trong database, d liu t mt h thng cc ng dng khc nh legacy system, file system, mail system Views (Tng giao din) : l phn giao din vi ngi dng, bao gm vic hin d liu ra mn hnh, cung cp cc menu, nt bm, hp i thoi, chn la , ngi dng c th thm, xa. sa, tm kim v lm cc thao tc khc i vi d liu trong h thng.. Thng thng, cc thng tin cn hin th c ly t thnh phn Models. Controllers (Tng iu khin): chu trch nhim x l cc tc ng v mt giao din, cc thao tc i vi models, v cui cng l chn mt view thch hp hin th ra mn hnh. Trong kin trc MVC, view ch c tc dng hin th giao din m thi, cn iu khin dng nhp xut ca ngi dng vn do Controllers m trch. 2.2 Gii thiu v Spring framework Spring Framework, hay ngn hn l Spring, l mt cu trc dng xy dng chng trnh ng dng m ngun m dnh cho ngn ng lp trnh Java. Spring Framework cung cp cc gii php cho nhiu thch thc k thut m cc nh pht trin phn mm Java v cc t chc mun to ng dng da trn nn

tng Java phi i mt vi Java platform. Bi v s lng ln chc nng ca Spring Framework, vic phn loi nhng b phn c bn kin to nn b khung l mt vic rt kh. Spring Framework khng ch c lin kt ring bit vi Java Enterprise platform mc d s tch hp su ca Spring trong Java EE l mt yu t quan trng cho s ph dng, ni ting ca n. C l Spring Framework ni ting nht vi s cung cp mt cch hiu qu cc tnh nng cn thit to ra cc ng dng thng mi phc tp, vt ln khi cc m hnh lp trnh tng chim v tr u th trong lch s ngnh cng nghip phn mm. Tip theo, n cng c ghi nhn v vic a cc chc nng vn t c quen bit vo thc t, c khi cn vt c ra bn ngoi nn tng Java na. Thnh qu ca vic ny l n to nn mt b khung, cung cp mt m hnh nht qun v lm cho n c th p dng vo hu ht cc loi ng dng c to trn nn tng Java ngy nay. B khung Spring c coi nh thc thi mt cch lm vic da trn nhng thi quen thc hnh tt nht v nhng tiu chun cng nghip, v ng thi to c hi cho nhng lnh vc trong Java s dng n 2.2.1 IoC(Inversion of Control) Cung cp khung ci t v qun l cc i tng Java. Khung ny c nhim v qun l vng i ca i tng: to i tng, gi cc hm khi to, cu hnh cc i tng bng cch ni n li vi nhau. i tng c to bi khung ny c gi l i tng c qun l hay Bean. Thng thng Bean c nh ngha trong file cu hnh XML 2.2.2 DI(Dependency Injection) L mt mu hnh m trong khung cha truyn giao cc i tng cho nhau bng tn ca chng, thng qua nhng phng php khi to (constructor), cc c tnh (properties) hoc cc phng php ch xut (factory methods / Factory method pattern).V d:

C th cu hnh properties, constructor bng XML: