8/12/2019 Detain Hibernate
1/23
Cc thnh vin trong nhm tm hiu:
Nguyn Nht Cng
Cao Chuyn
Mohamed Hary
AbuljaminNguyn Quc Vit
BO CO KT QUTM HIU
NHIBERNATE
YOUR WELCOME
8/12/2019 Detain Hibernate
2/23
1.NHibernate v kin trc NHibernate
+NHibernate l mt cng cORM(Object/Relation Mapping ) cho mi trng .NET .ORM l mt kthut dngnh xtm hnh i tng sang m hnh quan h.
+ Hibernate l mt dch vlu trv truy vn dliu quan hmnh mv nhanh. Hibernategip bn pht trin cc class dng lu trdliu theo cch thc rt l hng i tng:association, inheritance, polymorphism, composition v collections. Hibernate cho php bn thchin cc cu truy vn dliu bng cch sdng ngn ngSQL mrng ca Hibernate (HQL)hoc l ngn ngSQL nguyn thucng nh l sdng cc API.+ NHibernate cn c khnng truy vn , cp nht csdliu , cthl chng ta c ththc hin vic thm, xa , sa dliu v thc hin cc cu lnh select thng quaNHibernate.
+Khng ging nh cc persistence layer khc, Hibernate khng n i sc mnh ca ngn ngSQL khi bn m Hibernate cn m bo cho bn vic bn u t vo cng nghv tri thc csdliu quan hl lun lun chnh xc. V iu quan trng hn na l Hibernate c licensetheo LGPL (Lesser GNU Public License). Theo , bn c ththoi mi sdng Hibernate trongcc dn open source hoc cc dn thng mi (commercial).
+NHibernate l mt cng cmapping object/relational cho mi trng .NET. Thut ngmapping object/relational (ORM) lin quan ti kthut mapping mt m phng dliu ca mtobject model ti mt relational data model vi mt m hnh da trn SQL.+Cc thnh phn ca Hibernate project:
* Hibernate Core: Cung cp cc chc nng c bn ca mt persistence layer cho cc ng dngJava vi cc APIs v htrXML mapping metadata.* Hibernate Annotations: Cc map class vi JDK 5.0 annotations, bao gm Hibernate Validator.* Hibernate EntityManager: Sdng EJB 3.0 EntityManager API trong JSE hoc vi bt kJEEserver no.
* Hibernate Tools: Cc tool tch hp vi Eclipse v Ant dng cho vic sinh ra cc persistenceobject tmt schema c sn trong database (reverse-engineering) v tcc file hbm sinh ra ccclass java hin thc cc persistence object, ri Hibernate tto cc object trong database(forward-engineering).
* NHibernate: Hibernate cho .Net framework.
* JBoss Seam: Mt Java EE 5.0 framework cho pht trin cc ng dng JSF, Ajax v EJB 3.0
vi shtrca Hibernate. Seam hin rt mi v tra rt mnh pht trin cc ng dng Web2.0. N tch hp y tt ccc cng ngh"hot" nht hin nay.
Logo ca NHibernate :
8/12/2019 Detain Hibernate
3/23
i. Cc phin bnNHibernate c bt u bi Tom Barrett. Cui nm 2005, JBoss (nay l 1 phn
ca Red Hat) v pht trin cc phin bn ca NHibernate. Cui nm 2006 th JBossngng h tr d n ny v by gi NHibernate hon ton c pht trin bi cngng
Version 1.0 phn nh cc c im ca Hibernate 2.1 v 1 s c imca Hibernate 3
NHibernate 1.2.1 pht hnh vo thng 11 nm 2007, gii thiu nhiu cim ca Hibernate 3 v h tr .NET 2.0 nh stored procedures, genericsv nhng kiu d liu c php null (nullable types)
NHibernate 2.0 pht hnh vo ngy 23 thng 8 nm 2008, n c th sosnh vi Hibernate 3.2 v cc tnh nng, v phin bn ny NHibernates khng h tr .NET 1.1
NHibernate 2.1 c pht hnh ngy 17 thng 7 nm 2009
NHibernate 3.0 c pht hnh ngy 4 thng 12 nm 2010 v l phi nbn u tin dng .NET 3.5. H tr tch hp LINQ v API mnh nhQueryOver.
NHibernate 3.2 c pht hnh gn y vo khong thng 7 nm 2011 ii. Nhng im mi trong NHibernate 3.2
Mapping bng code : fluent configuration, khng cn nhng file .hbm.xml Subselect: c th map SQL views nh cc entity HQL paging: TAKE v SKIP trong HQL
Integrated bytecode provider: mt t DLL trin khaiiii. Ti sao dng NHibernate
ORM (ObjectRelational Mapping) l gL 1 k thut chuyn i d liu gia cc h thng kiu d liu khng tng
thch trong ngn ng lp trnh hng i tng. So snh vi k thut truyn thng
So vi k thut truyn thng l trao i gia 1 ngn ng hng i tng v 1csdl quan h, ORM gim thiu s lng code bn phi vit 1 cch ng k .
Nhc im ca cc cng c O/R mapping : Trong cc lnh vc c quyn hayk thut csdl c trng c ti u ha cao th hu ht cc cng c O/R mappingkhng thc hin tt vic xa b s lng ln d liu nh l stored procedures
u im : portableiv. Bt u NHibernate u
NHibernate l 1 d n m ngun m. Trang ch :http://www.nhforge.org Code v th vin lu ti SourceForge :
http://sourceforge.net/projects/nhibernate/
v. Hng tip cn
http://www.nhforge.org/http://www.nhforge.org/http://www.nhforge.org/http://sourceforge.net/projects/nhibernate/http://sourceforge.net/projects/nhibernate/http://sourceforge.net/projects/nhibernate/http://www.nhforge.org/8/12/2019 Detain Hibernate
4/23
C 3 hng tip cn : To model, to map model, cu hnh NHibernate v cui cng to bng (table)
trong database t model v mappings Cu hnh trc, sau thm mi entity v mapping tng ng cng lc, bng
(table) trong database c to t model v mappings CSDL c sn ca ng dng khc, dng cc k thut mapping nng cao
vi. Cc thnh phn c bn ISession : Interface ny tn t chi ph to v hy. ISession v c bn ch l
mt unit of work (n v lm vic) ISessionFactory : Interface ny kh tn chi ph to v ng dng ca bn ch
nn to mt instance duy nht cho mi database m bn mun truy xut IConfiguration : Theo nh ci tn ni ln c bn cht, interface
IConfiguration cu hnh cho NHibernatev c s dng trc khi to raISessionFactory
ITransaction : Interface ny c s dng iu khin cc tng tc vidatabase theo transactions. ITransaction ch h tr ch khng bt buc s
dng IQuery : IQuery tn t chi ph v phi c s dng trong mt session to ra n ICriteria : Cho php bn truy vn trn cc i tng theo cc iu kin no
8/12/2019 Detain Hibernate
5/23
Mapping 1 Model xung databasei. Mapping l g
Trc tin, ta cn bit database schema l m t cu trc ca database, m td liu c t chc trong database v c chia vo cc bng nh th no. N cng
ch r loi kiu d liu c th c lu tr, mi quan h gia cc bng vi nhau. Trongc s d liu quan h, 1 schema nh ngha cc bng, cc trng (cc ct), cc miquan h, cc ch mc (indexes), cc rng buc, views, cc stored procedures.
Qua ta thy model l hng i tng, trong khi database schema l biu thquan h.
Mapping nh ngha cch nh x 1 lp i tng xung 1 bng trong csdl, gmcc thuc tnh, cc kiu d liu vcc rng buc, cc tham chiu ..Mapping nh nghalp no map vi bng no v thuc tnh no ca lp map vi ct no ca bng
ii. Cc loi mappingXML-based mapping
Mi entity ca model c map vi 1 file XML document xung 1 bng trongcsdl. Cu trc ca XML document c nh ngha trong nhibernate -mapping.xsd file,c download trong NHibernate
Cch mapping ny l cch truyn thng, rt linh hot nh ngha 1 mapping, chng ta add 1 XML file vo d n vi ui m rng l
*.hbm.xml. File XML phi l 1 embeded resourceca d n, v ni dung ca n phitheo cu trc c nh ngha trong .xsd file ni trn.
Attribute-based mapping
Thay v map 1 entity trong 1 file document ring bit xung 1 bng trong csdl, thc th dng cc attribute lm vic
Fluent mapping
Vic mapping cc entity xung cc bng trong csdl 1 cch an ton dng fluentAPI, n lm code d c v ngn gn
Vic mapping c nh ngha 1 lp (class) ring bit. Fluent NHibernateframework download ti (http://www.fluentnhibernate.org)
Convention-based mapping, cn gi l mapping t ngiii. XML Mapping
To 1 solution folder tn l Schemav add 2 file nhibernate-configuration.xsd vnhibernate-mapping.xsd trong Nhibernate download vo folder Schema, nh hnh
sau :
http://www.fluentnhibernate.org/http://www.fluentnhibernate.org/http://www.fluentnhibernate.org/http://www.fluentnhibernate.org/8/12/2019 Detain Hibernate
6/23
nh ngha 1 mapping cho 1 entity, chng ta add mi 1 file XML vo d n.File ny c ui m rng l .hbm.xml, vnn t tn ging tn ca entity. V dProduct.hbm.xml mapping Product entity.
Chng ta cng set thuc tnh Build Actionca XML file thnh Embeded
Resourcenh hnh sau :
8/12/2019 Detain Hibernate
7/23
Ging nh bt k file XML document no khc, file XML mapping cng bt ubng 1 khai bo XML, n gin l 1 th xml vi 2 thuc tnh version v encoding :
Tip theo l th hibernate-mapping. Th ny c thuc tnh xmlns, namespace v
assembly ch ra ni m cha lp ta ang map
1. Classes
Th tip theo cn nh ngha l th class, th ny bo cho NHibernate 2 th - 1l ch ra lp m mapping document ny i din v 2 l ci bng trong csdl m lp map ti.
Th lp c 2 thuc tnh (attributes) ta cn quan tm l name v table
2. Properties
Chng ta c th mapcc thuc tnh (properties) ca lp vo cc trng trongcsdl dng th id v th property.
8/12/2019 Detain Hibernate
8/23
Mt trong nhng thuc tnh m rng thng dng trong th id v property lthuc tnh type. Bn c th ch cho NHibernate l bn dng kiu d liu no lu
thng tin ca lp, v d
Nu bn khng dng thuc tnh type th NHibernate s t xc nh kiu d liutheo phn x
3. ID columns
Thuc tnh u tin sau th class l bn mun map 1 thuc tnh Id. Th ny cnhiu option bn la chn, v d n gin nht l :
Nhng dng ny ch cho NHibernate bitbn c 1 thuc tnh Id trong lp cabn, n c map xung 1 trng Id trong csdl. V y bn dng b to hilo cungcp bi Nhibernate sinh s t tng cho trng Id.
Bn cng c th ch ra kiu d liu qua thuc tnh type.
Ngoi ra nu bn mun i tn ct trong csdl th lm nh sau
Cc thuc tnh ph :
name : nh ngha tn ca ct trong csdl
length : chiu di ca trng trong csdl
sql-type : kiu d liu ca ct trong csdl
not-null : rng buc ct d liu c php null hay khng. Nu not -null=true thkhng c null
4. One-to-many relations
8/12/2019 Detain Hibernate
9/23
Gi s ta c entity l Order c thuc tnh(property) l LineItems, l tp hp cacc LineItem entity. Mi LineItem entity c 1 property l Order tham chiu n ordercha n. By gi ta map bn pha one ca mi quan h, tc l bn LineItem entity:
Trong th trn, thuc tnh name nh ngha tn ca property trong lp LineItem,
thuc tnh class nh ngha lp m property tham chiu, thuc tnh column ch ra tntrng trong csdl, cha kha ngoi n bng Order. Cui cng not-null nh ngha lkha ngoi OrderId khng c rng.
By gi ta map bn pha many. Trong Order mapping file, ta cn to 1 thnhphn bag nm gi ton b lineItems. Mt bag l cch Nhibernate lu tr 1 tp hp kth t cho php trng lp ccitem. Ta c 1 thnh phn name nh ngha tn caproperty, thnh phn con key ch ra ct trong csdl m trng ny i din
Bn s thy th one-to-many tng t nh th many-to-one ta to bn phaone, bn bo Nhibernate v mi quan h inverse qua vic dng th inverse trongthnh phn bag. Tc l bn chuyn quyn s hu mi quan h (relationship owner)cho Order.
Th cascade ch cho NHibernate bit x l cc i tng nh th no khi chngta delete n.
Th lazy ch cho NHibernate dng lazy loading ngha l dng (record) s khngc ko t database hay load vo b nh cho ti khi bn dng n, mc nh lazy
loading c m, bn mun tt th dng lazy =false.
5. Many-to-many relations
Quan h nhiu nhiu (many-to-many) c dng khc ph bin.
8/12/2019 Detain Hibernate
10/23
Trong hnh trn, bng BookAuthor dng kt 2 bng Book v Author.
NHibernate thng minh qun l nhng mi quan h nhiu nhiuTa biu din Authors trong lp Book vi 1 tp hp cc i tng Author nh sau
public IEnumerable Authors { get; set; }
Ta cng biu din Books trong lp Author vi 1 tp hp cc i tng Book nhsau
public IEnumerable Books { get; set; }
Mapping mi quan h nhiu nhiu phc tp hn quan h 1 nhiu. Chng ta dng1 th bag v c 1 th key bn trong. Chng ta cn thm thuc tnh table trong th bag cho NHibernate bit bng no lu tr d liu quan h bn trong. Thay v dng thuctnh one-to-many v many-to-one, c 2 pha ta dng thnh phn many-to-manyBn Book mapping file :
Bn Author mapping file :
8/12/2019 Detain Hibernate
11/23
6. Mapping value objects
map cc thuc tnh ca value object, chng ta dng th component, v dchng ta s map thuc tnh name ca entity Customer nh sau :
7. Hng dn tng bc mapping vi XMLTo mi 1 project, chn Console Application, t tn lXmlMappingSample.
Add reference n assembly NHibernate.dll vo d nTrong ca s Solution Explorer, click phi v solution, chn Add|New
Folder, t tn l SchemaClick phi Schema folder, chn Add|Existing Item, add file nhibernate-mapping.xsd trong th mc NHibernate-3.1.0.GA-bin\lib download ,vo schema folder
To th mc tn Domain trong d nTo cc lp Customer, Order v LineItem trong th mc Domain ca dn. Cc lp ny c code nh sau public class Customer
{
public virtual int Id { get; set; }
public virtual string CustomerName { get; set; }}
public class Order
{
public virtual int Id { get; set; }
public virtual DateTime OrderDate { get; set; }
public virtual Customer Customer { get; set; }
public virtual IList LineItems { get; set; }
}
public class LineItem
{
public virtual int Id { get; set; }
public virtual int Quantity { get; set; }
public virtual decimal UnitPrice { get; set; }
8/12/2019 Detain Hibernate
12/23
public virtual string ProductCode { get; set; }
}
Add xml file vo folder Domain tn file l Customer.hbm.xml, v thuc tnhBuild Actionca file phi c set l Embeded Resource. cha codenh sau :
Tng t cch to cho Order.hbm.xml v LineItem.hbm.xml. nh setthuc tnh Build Actionca file phi c set l Embeded Resource
8/12/2019 Detain Hibernate
13/23
Khai bo using trong file Program.cs
using System;
using NHibernate.Cfg;
using NHibernate.Cfg.Loquacious;
using NHibernate.Dialect;
using NHibernate.Driver;using NHibernate.Tool.hbm2ddl;
using XmlMappingSample.Domain;
Trong phng thc Main ca Program.cs , thm code to i tngNHibernate configuration dng fluent API c cung cp bi NHibernatenh sau :
var configuration = new Configuration();
configuration.DataBaseIntegration(db =>
{
db.Dialect();db.Driver();
});
Thm code add tt c XML mapping file cu hnh nh sau : configuration.AddAssembly(typeof (Customer).Assembly);
Thm code to script to SQL schema nh sau : var exporter = new SchemaExport(configuration);
exporter.Execute(true, false, false);
iv. XML Mapping
To 1 solution folder tn l Schemav add 2 file nhibernate-configuration.xsd vnhibernate-mapping.xsd trong Nhibernate download vo folder Schema, nh hnhsau :
8/12/2019 Detain Hibernate
14/23
nh ngha 1 mapping cho 1 entity, chng ta add mi 1 file XML vo d n.File ny c ui m rng l .hbm.xml, v nn t tn ging tn ca entity. V dProduct.hbm.xml mapping Product entity.
Chng ta cng set thuc tnh Build Actionca XML file thnh Embeded
Resourcenh hnh sau :
8/12/2019 Detain Hibernate
15/23
Ging nh bt k file XML document no khc, file XML mapping cng bt ubng 1 khai bo XML, n gin l 1 th xml vi 2 thuc tnh version v encoding :
Tip theol th hibernate-mapping. Th ny c thuc tnh xmlns, namespace v
assembly ch ra ni m cha lp ta ang map
8. Classes
Th tip theo cn nh ngha l th class, th ny bo cho NHibernate 2 th - 1l ch ra lp m mapping document ny i din v 2 l ci bng trong csdl m lp map ti.
Th lp c 2 thuc tnh (attributes) ta cn quan tm l name v table
9. Properties
Chng ta c th map cc thuc tnh (properties) ca lp vo cc trng trongcsdl dng th id v th property.
8/12/2019 Detain Hibernate
16/23
Mt trong nhng thuc tnh m rng thng dng trong th id v property lthuc tnh type. Bn c th ch cho NHibernate l bn dng kiu d liu no lu
thng tin ca lp,v d
Nu bn khng dng thuc tnh type th NHibernate s t xc nh kiu d liutheo phn x
10. ID columns
Thuc tnh u tin sau th class l bn mun map 1 thuc tnh Id. Th ny cnhiu option bn la chn, v d n gin nht l :
Nhng dng ny ch cho NHibernate bit bn c 1 thuc tnh Id trong lp cabn, n c map xung 1 trng Id trong csdl. V y bn dng b to hilo cungcp bi Nhibernate sinh s t tng cho trng Id.
Bn cng c th ch ra kiu d liu qua thuc tnh type.
Ngoi ra nu bn mun i tn ct trong csdl th lm nh sau
Cc thuc tnh ph :
name : nh ngha tn ca ct trong csdl
length : chiu di ca trng trong csdl
sql-type : kiu d liu ca ct trong csdl
not-null : rng buc ct d liu c php null hay khng. Nu not-null=true thkhng c null
11. One-to-many relations
8/12/2019 Detain Hibernate
17/23
Gi s ta c entity l Order c thuc tnh(property) l LineItems, l tp hp cacc LineItem entity. Mi LineItem entity c 1 property l Order tham chiu n ordercha n. By gi ta map bn pha one ca mi quan h, tc l bn LineItem entity:
Trong th trn, thuc tnh name nh ngha tn ca property trong lp LineItem,
thuc tnh class nh ngha lp m property tham chiu, thuc tnh column ch ra tntrng trong csdl, cha kha ngoi n bng Order. Cui cng not-null nh ngha lkha ngoi OrderId khng c rng.
By gi ta map bn pha many. Trong Order mapping file, ta cn to 1 thnhphn bag nm gi ton b lineItems. Mt bag l cch Nhibernate lu tr 1 tp hp kth t cho php trng lp cc item. Ta c 1 thnh phn name nh ngha tn caproperty, thnh phn con key ch ra ct trong csdl m trng ny i din
Bn s thy th one-to-many tng t nh th many-to-one ta to bn phaone, bn bo Nhibernate v mi quan h inverse qua vic dng th inverse trongthnh phn bag. Tc l bn chuyn quyn s hu mi quan h (relationship owner)cho Order.
Th cascade ch cho NHibernate bit x l cc i tng nh th no khi chngta delete n.
Th lazy ch cho NHibernate dng lazy loading ngha l dng (record) s khngc ko t database hay load vo b nh cho ti khi bn dng n, mc nh lazy
loading c m, bn mun tt th dng lazy =false.
12. Many-to-many relations
Quan h nhiu nhiu (many-to-many) c dng khc ph bin.
8/12/2019 Detain Hibernate
18/23
Trong hnh trn, bng BookAuthor dng kt 2 bng Book v Author.
NHibernate thng minh qun l nhng mi quan h nhiu nhiu Ta biu din Authors trong lp Book vi 1 tp hp cc i tng Author nh sau
public IEnumerable Authors { get; set; }
Ta cng biu din Books trong lp Author vi 1 tp hp cc i tng Book nhsau
public IEnumerable Books { get; set; }
Mapping mi quan h nhiu nhiu phc tp hn quan h 1 nhiu. Chng ta dng1 th bag v c 1 th key bn trong. Chng ta cn thm thuc tnh table trong th bag cho NHibernate bit bng no lu tr d liu quan h bn trong. Thay v dng thuctnh one-to-many v many-to-one, c 2 pha ta dng thnh phn many-to-manyBn Book mapping file :
Bn Author mapping file :
8/12/2019 Detain Hibernate
19/23
13. Mapping value objects
map cc thuc tnh ca value object, chng ta dng th component, v dchng ta s map thuc tnh name ca entity Customer nh sau :
14.Hng dn tng bc mapping vi XMLTo mi 1 project, chn Console Application, t tn lXmlMappingSample.
Add reference n assembly NHibernate.dll vo d nTrong ca s Solution Explorer, click phi v solution, chn Add|New
Folder, t tn l SchemaClick phi Schema folder, chn Add|Existing Item, add file nhibernate-mapping.xsd trong th mc NHibernate-3.1.0.GA-bin\lib download ,vo schema folder
To th mc tn Domain trong d nTo cc lp Customer, Order v LineItem trong th mc Domain ca dn. Cc lp ny c code nh sau public class Customer
{
public virtual int Id { get; set; }
public virtual string CustomerName { get; set; }}
public class Order
{
public virtual int Id { get; set; }
public virtual DateTime OrderDate { get; set; }
public virtual Customer Customer { get; set; }
public virtual IList LineItems { get; set; }
}
public class LineItem
{
public virtual int Id { get; set; }
public virtual int Quantity { get; set; }
public virtual decimal UnitPrice { get; set; }
8/12/2019 Detain Hibernate
20/23
public virtual string ProductCode { get; set; }
}
Add xml file vo folder Domain tn file l Customer.hbm.xml, v thuc tnhBuild Actionca file phi c set l Embeded Resource. cha codenh sau :
Tng t cch to cho Order.hbm.xml v LineItem.hbm.xml. nh setthuc tnh Build Actionca file phi c set l Embeded Resource
8/12/2019 Detain Hibernate
21/23
Khai bo using trong file Program.cs
using System;
using NHibernate.Cfg;
using NHibernate.Cfg.Loquacious;
using NHibernate.Dialect;
using NHibernate.Driver;using NHibernate.Tool.hbm2ddl;
using XmlMappingSample.Domain;
Trong phng thc Main ca Program.cs , thm code to i tngNHibernate configuration dng fluent API c cung cp bi NHibernatenh sau :
var configuration = new Configuration();
configuration.DataBaseIntegration(db =>
{
db.Dialect();db.Driver();
});
Thm code add tt c XML mapping file cu hnh nh sau :configuration.AddAssembly(typeof (Customer).Assembly);
Thm code to script to SQL schema nh sau : var exporter = new SchemaExport(configuration);
exporter.Execute(true, false, false);
8/12/2019 Detain Hibernate
22/23
2.Kin trc NHibernate
Kin trc ca Hibernate bao gm 3 phn:
Qun l kt ni:Dch v qun l kt ni ca Hibernate cung cp vic qun l ht schiu qu cc connection n database. Database connection lun l phn t v nhiuri ro trong vic kim sot, chng ta tn nhiu ti nguyn m v ng mt connection,hn na, vic x l d liu phc tp v c th dn n qun st vic ng kt ni hocng mt cch khng hp l. iu ny hon ton khng n gin v dn n mt ngdng v. (Mt v d l ng nhiu kt ni trong 1 khitry...catch)
Qun l transation (giao tc):dch v qun l giao tc cung cp kh nng cho php userthi hnh nhiu pht biu (statement) vo mt thi im.
Object relational mapping:
Cng ngh mapping d liu di database thnh d liu trn object. Hibernate s s dng
8/12/2019 Detain Hibernate
23/23
SELECT, INSERT, UPDATE v DELETE trn cc records v a thao tc didatabase tng ng vi vic thao tc tn Object java.
Mc ch sau cng ca hibernate l ORM, nhng n phi thm vo cc dch v qun lConnnection v Transaction v pht sinh t vn performance v s kh khn khi t mnh x l
nhng dch v ny trn Object c persistent. Hibernate buc phi s dng nhng cng c qunl kt ni v transationca bn th 3 hon thin m hnh ca mnh. Mt v d l ApacheDBCP thng c s dng trong connection pooling vi Hibernate.Hibernate rt uyn chuyn, n c th tch hp vi nhng cng ngh khc nhn c s h trtt nht, tiu biu c Spring.