You are on page 1of 9

I) Tng quan v Hibernate

Hibernate 3.0, mt cng ngh mi nht trong nn tng ct li ca J2 J! 3.0.


Hibernate l" mt #rame$or% cho &er'i'tence la(er, l" mt )*ch +, l-. tr/ +" tr.(
+n )/ li. 0.an h m1nh m2 +" nhanh ch3ng. Hibernate gi4& ng-5i &h6t tri7n c6c
cla'' )8ng 97 l-. tr/ )/ li. theo c6ch th:c h-ng 9i t-;ng< a''ociation,
inheritance, &ol(mor&hi'm, com&o'ition +" collection'. Hibernate cho &h=& th>c
hin c6c c?. tr.( +n )/ li. b@ng c6ch 'A ),ng ngn ng/ BCD mE rng ca
Hibernate FHCDG hoHc l" ngn ng/ BCD ng.(In th.J cKng nh- l" 'A ),ng c6c LMN.
Ohng ging nh- c6c &er'i'tence la(er %h6c, Hibernate %hng Pn 9i ':c
m1nh ca ngn ng/ BCD th.Qn t4( m" Hibernate cRn 9m bo cho ng-5i &h6t tri7n
9Q. t- +"o cng ngh +" tri th:c cS 'E )/ li. 0.an h l" l.n l.n chTnh U6c. V"
9i. 0.an trWng hSn n/a l" Hibernate 9-;c licen'e theo DXMD FDe''er XYZ M.blic
Dicen'eG. [heo 93, b1n c3 th7 thoi m6i 'A ),ng Hibernate trong c6c )> 6n o&en
'o.rce hoHc c6c )> 6n th-Sng m1i FcommercialG.
\6c tTnh n]ng ca Hibernate<
^ Hibernate 3.0 c.ng c& ba 9Q( 9 tTnh n]ng tin tr.( +n< Hibernate C.er(
Dang.age, Hibernate \riteria C.er( LMN +" c6c tr.( +n t> nhiIn.
^ ! lWc 97 l"m +ic +i )/ li. t1m th5i ,+8ng )/ li. hoHc c6c )/ li. 9-;c
&h?n 0.(n

^ Y?ng cao %h n]ng tr.( +n +i LMN< +i '> h tr; 9Q( 9 cho c6c &h=& chi_.
,&h=& %_t h;& +" &h=& chWn.

^ Oi7m 'o6t 9-;c th5i gian ch1(< thng 0.a J`a hoHc Ja+a LMN, bao gbm c b
9m trcnh ).(t E m:c th: c&.

^ H tr; Nd cli&'e, bao gbm mt b cli&'e &l.gein 97 l"m +ic +i
Hibernate 3.0, bao gbm biIn tf& liIn %_t, t-Sng t6c +i mg. tr.( +n, cng c, nhfn
l1i c. tr4c cS 'E )/ li..

^ Hibernate l" mihn &hT theo DXMD< Hibernate c3 th7 9-;c )8ng 97 &h6t tri7n
&h?n &hi c6c :ng ),ng mihn &hT.

^ Hibernate c3 th7 mE rng< Hibernate mang l1i hi. n]ng cao +" %i_n tr4c 2 l&
ca n3 c3 th7 9-;c 'A ),ng trong mi tr-5ng tf& tr.ng.

^ Xim th5i gian &h6t tri7n :ng ),ng< Hibernate l"m gim th5i gian &h6t tri7n
c6c :ng ),ng +c n3 h tr; thia %_, 9a hcnh, th"nh &hQn +" c6c #rame$or% trong
ja+a.

^ Hibernate a`D cho &h=& liIn %_t )/ li. 9-;c bi7. )ihn nh- a`D +" MkJk'
tha( th_ cho nha..
II) Kin Trc Hibernate
BS 9b trIn cho th( r@ng Hibernate l" 'A ),ng cS 'E )/ li. +" #ile c. hcnh 97
c.ng c& c6c )*ch +, l?. )"i cho :ng ),ng.
l7 'A ),ng Hibernate, '> cQn thi_t &hi t1o ra c6c l& Ja+a bi7. )ihn cho bng
t-Sng :ng trong cS 'E )/ li. +" 'a. 93 6nh U1 c6c th.c tTnh ca l& +i c6c ct
ca bng trong cS 'E )/ li.. Ba. 93, Hibernate c3 th7 9-;c 'A ),ng 97 th>c
hin c6c thao t6c trIn cS 'E )/ li. nh- chmn, chWn, cf& nhft +" U3a c6c bn ghi
trong bng. Hibernate t> 9ng t1o ra c6c tr.( +n 97 th>c hin c6c thao t6c n"(.
Oi_n tr4c Hibernate c3 ba th"nh &hQn chTnh<
^ C.n ln %_t ni
Hibernate c.ng c& )*ch +, 0.n ln %_t ni cS 'E )/ li. hi. 0.. O_t ni cS
'E )/ li. l" &hQn tn %=m t"i ng.(In +" hi. n]ng nht trong +ic t-Sng t6c +i
cS 'E )/ li. +c n3 9Ri hoi nhi. t"i ng.(In &hi mE +" 93ng %_t ni cS 'E )/
li..

^ C.n ln giao )*ch<
C.n ln )*ch +, giao )*ch c.ng c& %h n]ng ng-5i 'A ),ng 97 th>c hin
nhi. hSn mt c?. lnh t1i mt th5i 9i7m.

^
li t-;ng bn 9b 0.an h<
li t-;ng bn 9b 0.an h l" %p th.ft lf& 6nh U1 bi7. )ihn )/ li. ti mt m
hcnh 9i t-;ng cho 9_n mt m hcnh )/ li. 0.an h. li t-;ng n"( 9-;c 'A
),ng 9I th>c hin c6c thao t6c nh- tr.( +n ,thIm mi, cf& nhft +" U3a c6c bn
ghi )1ng bng bIn )-i.Hibernate l" rt tt cng c, nh- Ua nh- l" 9i t-;ng bn
9b 0.an h l" mi 0.an t?m, nh-ng + mHt 0.n ln %_t ni +" 0.n ln giao )*ch,
93 l" thi_. hi. n]ng +" %h n]ng. Vc +f(, th-5ng Hibernate 9-;c 'A ),ng 97
0.n ln %_t ni %h6c +" c6c cng c, 0.n ln giao )*ch. VT ), a&ache d!\M 9-;c
'A ),ng 97 %_t ni tqng h;& +i Hibernate.
Hibernate c.ng c& rt nhi. tTnh linh ho1t trong 'A ),ng. Y3 9-;c gWi l" %i_n
tr4c rDiter %hi ch4ng ta chs 'A ),ng c6c th"nh &hQn 9i t-;ng bn 9b 0.an h.
[rong %hi %i_n tr4c rt.ll \reamr tt c trong ba th"nh &hQn 9i t-;ng 0.an h
lf& bn 9b, 0.n ln %_t ni +" C.n ln giao )*ch 9-;c 'A ),ng.
III) Thnh phn ca ng dng Hibernate
\6c ku` #rame$or% mang 9_n cho c6c )e+elo&er nh/ng t- ).( trong %h6i
nim + 0.an h trong %hi +gn l"m +ic +i c6c l&. \3 nhi. #rame$or% mang
m,c 9Tch n"(. Yh/ng gc l"m cho Hibernate %h6c +i nh/ng #rame$or% %h6c
chTnh l" tTnh 9Sn gin +" %h ch.(7n ca n3. l7 t1o nIn :ng ),ng Hibernate,
c3 ba 9i. cQn &hi c3, 93 l"<
1 !er"i"tence #$a""%
Mer'i'tence cla'' l" mt Mlain kl) Ja+a kbject ha( MkJk mo)el. `t MkJk l"
t-Sng t> nh- mt Ja+a!ean, c3 nh/ng getter +" 'etter 97 tr.( c?& c6c th.c tTnh
ca n3 l" nh/ng in'tance +ariable Fbi_n th>c th7G. Mer'i'tence cla'' c3 nh/ng 9Hc
9i7m )-i 9?(<
Y3 l" tha( th_ h-ng 9i t-;ng cho bng E cS 'E )/ li.
\6c th.c tTnh ca bng trE th"nh nh/ng in'tance +ariable ca &er'i'tence
cla''.
Oi7. )/ li. ca c6c in'tance +ariable l" )omain ca c6c th.c tTnh.
li t-;ng ca &er'i'tence cla'' tha( h_ cho h"ng ca bng.

& 'apping (i$e%
`a&&ing #ile l" mt #ile a`D ch:a 6nh U1 chi ti_t gi/a &er'i'tence cla'' +" bng
n3 tha( th_. \6c th"nh &hQn bvt b.c ca #ile a`D n"( l"<
2.w Hibernateema&&ing< l?( l" th"nh &hQn gc bao tt c c6c th"nh &hQn
%h6c
2.2 \la''< 9-;c 'A ),ng 97 6nh U1 tIn bn th"nh &er'i'tence cla''. [In
th.c tTnh 9-;c 'A ),ng 97 U6c 9*nh tIn l&, +" th.c tTnh bn 9-;c 'A ),ng 97
U6c 9*nh bng m" l& tha( th_. VT ), 97 6nh U1 mt bn mang tIn kuduB th"nh
mt &er'i'tence cla'' +i tIn 9Q( 9 l" com.'omeorg.&er'i't.kr)er '2 nh- )-i 9?(<
<class name=com.someorg.persist.Order table=ORDERS></class>
2.3 Nd< [h"nh &hQn n"( 'A ),ng 97 6nh U1 %h3a chTh ca table th"nh mt
in'tance +ariable ca cla''. [h"nh &hQn ct con ca i) c3 th7 'A ),ng 97 6nh U1
th"nh bi_n t-Sng :ng. Xi6 tr* ca %h3a chTnh c3 th7 t> 9ng t1o ra 9-;c cng b E
9?(. [h"nh &hQn generator c3 th7 9-;c 'A ),ng 97 n3i cho Hibernate mt l& '2
9-;c 'A ),ng E 9?. 97 t> 9ng t1o i), hoHc i) 9-;c g6n bEi :ng ),ng.
<id name="id" type="string" unsaed!alue="null">
<column name="id" s"l!type="c#ar$%&'" not!null="true"/>
<generator class="assigned"/>
</id>
VT ), trIn n3i cho Hibernate r@ng, tIn ca %h3a chTnh l" i) m" n3 9x 9-;c 6nh U1
th"nh in'tance +ariable ri)r. Oi7. )/ li. ca n3 l" r'tringr 9-;c 6nh U1 cho ct
ri)r c3 %i7. rcharF32Gr tha( th_ bEi th.c tTnh '0let(&e. [h.c Tnh l& ca
generator ch:a gi6 tr* ra''igne)r nghya l" :ng ),ng bn th?n n3 '2 c.ng c& gi6 tr*
cho %h3a chTnh.
2.z Mro&ert(< th"nh &hQn n"(, th.c + c6c ct th"nh &hQn con ca n3, 6nh
U1 nh/ng th.c tTnh %h6c FhoHc c6c ct th"nh nh/ng in'tance +ariable ca
&er'i'tence cla''. [h.c tTnh name ca &ro&ert( ch:a tIn ca bi_n nh- mt gi6 tr*.
[h.c tTnh name ca th"nh &hQn col.mn ch:a tIn ca ct m" in'tance +ariable
9-;c 6nh U1. \6c th.c tTnh length +" '0let(&e tro 9_n 9 )"i +" %i7. )/ li. ca
ct
<property name="name">
<column name="name" s"l!type="c#ar$&(('" not!null="true"/>
</property>
) Hibernate #*n(igurati*n (i$e%
tile n"( c3 th7 9-;c gWi tro 9_n :ng ),ng 'A ),ng Hibernate. Yg.(In nh?n l" n3
ch:a c. hcnh 9i. %hi7n giao ti_& +i )ataba'e E &hTa )-i. { 9?(, tt c c6c #ile
ma&&ing 9-;c 'A ),n bEi :ng ),ng 9-;c cng b. l*nn )1ng th"nh &hQn ca
hibernateecon#ig.ration l" th"nh &hQn gc. HQ. h_t c6c th"nh &hQn thng ),ng 'A
),ng trong #ile a`D l"<
3.wMro&ert(< [h.c tTnh name ca th"nh &hQn &ro&ert( c3 th7 9-;c 'A ),ng
97 c. hcnh nh/ng tham ' %h6c nha.. [rong cng ngh Hibernate, nh/ng tham '
n"( 9-;c bi_t nh- l" nh/ng tham ' &ro&ert(. Oi7. )ataba'e 'er+er F`(BCD,
kracle...G, )ialect cla'', ZuD ca )ataba'e, .'ername|&a''$or)... l" nh/ng tham '
&ro&ert( %h6c nha.. l7 9Ht ch4ng +"o trong mx<
<session!)actory>
<*!! Database connection settings !!>
<property name="connection.drier+class">org.#s"ldb.,dbcDrier</property>
<property name="connection.url">,dbc-#s"ldb-data/tutorial</property>
<property name="connection.username">sa</property>
-
-
</session!)actory>
3.2 `a&&ing< Y3 l" th"nh &hQn %_t ni tt c c6c #ile ma&&ing,, cKng gWi l"
c6c #ile hbm, 9-;c 'A ),ng bEi :ng ),ng 9x cng b. [h.c tTnh re'o.rce 9-;c
cho gi6 tr* ca 9-5ng )gn #ile hbm.
<mapping resource="Eent.#bm..ml"/>
IV)V d minh ha
^ VT ), U=t mt bng kr)er' \. tr4c nh- 'a. <
\uL[ [L!D kuduBF
Nd VLu\HLu Yk[ YZDD MuN`Lu} O},
kudu~dL[ [N`B[L`M Yk[ YZDD,
MuN\~[k[LD dkZ!D Yk[ YZDDG
^ !-c %_ ti_& l" t1o ra &er'i'tence cla'' FcKng chTnh l" mt Ja+a!eanG
&ac%age com.'omeorg.&er'i't
import ,aa.util.Date/
import ,aa.util.0as#Set/
import ,aa.util.Set/
public class Order 1
priate String id/
priate Date date/
priate double price2otal/
// 3utomatically set t#e creation time o)
// t#is Order
public Order$' 1
t#is.date = ne4 Date$'/
5
public String get6d$' 1
return id/
5
public oid set6d$String string' 1
id = string/
5
// ot#er getters/setters not s#o4n )or
// breity
// ...
5
^ !-c ti_& theo t1o #ile hbm. [In ca #ile l" kr)er.hbm.Uml
<7.ml ersion=89.:8 encoding=8ut)!;87>
<*DO<2=>E #ibernate!con)iguration >?@A6<
"!//0ibernate/0ibernate <on)iguration D2D %.://EB"
"#ttp-//#ibernate.source)orge.net/#ibernate!con)iguration!%.:.dtd">
<#ibernate!mapping de)ault!cascade="none" de)ault!access="property" auto!import="true">
<class name=" com.someorg.persist.Order" table="orders" mutable="true" select! be)ore!
update=")alse" optimistic!locC="ersion">
<id name="id" type="string" unsaed!alue="null">
<column name="id" s"l!type="c#ar$%&'" not!null="true" />
<generator class="assigned" />
</id>
<property name="date" not!null=")alse" >
<column name="order+date" s"l!type="datetime" not!null="true" />
</property>
<property name="price2otal" not!null=")alse" >
<column name="price+total" s"l!type="double" not!null="true" />
</property>
^ [t c c6c in'tance +ariable 9-;c 6nh U1 'A ),ng th"nh &hQn &ro&ert(. l?( l" #ile c. hcnh
<7.ml ersion=89.:8 encoding=8ut)!;87>
<*DO<2=>E #ibernate!con)iguration >?@A6<
"!//0ibernate/0ibernate <on)iguration D2D %.://EB"
"#ttp-//#ibernate.source)orge.net/#ibernate!con)iguration!%.:.dtd">
<#ibernate!con)iguration>
<session!)actory>
<*!! Database connection settings !!>
<property name="connection.drier+class"> oracle.,dbc.drier.OracleDrier
</property>
<property name="connection.url">,dbc-oracle-t#in-Dlocal#ost-
9(&9-orcl </property>
<property name="connection.username">scott</property>
<property name="connection.pass4ord">tiger</property>
<*!! ED@< connection pool $use t#e built!in' !!>
<property name="connection.pool+siFe">9</property>
<*!! SGA dialect !!>
<property name="dialect"> org.#ibernate.dialect.OracleDialect </property>
<*!! Ec#o all e.ecuted SGA to stdout !!>
<property name="s#o4+s"l">true</property>
<mapping resource=" com/someorg/persist/Eent.#bm..ml"/>
</session!)actory>
</#ibernate!con)iguration>
^ [e't ng ),ng <
pacCage test/
import ,aa.util.Aist/
import org.#ibernate.0ibernate/
import org.#ibernate.Session/
import org.#ibernate.SessionHactory/
import org.#ibernate.c)g.<on)iguration/
import com.someorg.persist.Order/
// use as
// ,aa test. HindOrder@y6d name
public class HindOrder@y6d 1
public static oid main$StringIJ args' t#ro4s E.ception 1
// "uery to issue
String "uery = "select order )rom Order " K "4#ere order.id=-id"/
// searc# )or 4#at7
String name = argsI:J/

// init
<on)iguration c)g = ne4 <on)iguration$'.add<lass$Order.class'/
SessionHactory s) = c)g.buildSessionHactory$'/
// open session
Session sess = s).openSession$'/
// searc# and return
Aist list = sess.)ind$"ueryL idL 0ibernate.S2R6BM'/
i) $list.siFe$' == :' 1
System.out.println$"Bo Order #aing id " K id'/
System.e.it$:'/
5
Order o = $Order' list.get$:'/
sess.close$'/
System.out.println$"Hound Order- " K p'/
5
5

You might also like