使用Spring構(gòu)建你的ORM應(yīng)用的好處包括: l 避免綁定非凡的技術(shù),答應(yīng)mix-and-match的實(shí)現(xiàn)策略。雖然Hibernate非常強(qiáng)大,靈活,開(kāi)源而且免費(fèi),但它還是使用了自己的特定的API。此外有人也許會(huì)爭(zhēng)辯:iBatis更輕便而且在不需要復(fù)雜的O/R映射策略的應(yīng)用中使用也很優(yōu)秀。能夠選擇的話,使用標(biāo)準(zhǔn)或抽象的API來(lái)實(shí)現(xiàn)主要的應(yīng)用需求,通常是更好的。尤其,當(dāng)你可能會(huì)因?yàn)楣δ埽阅芑蚱渌矫娴脑蚨枰袚Q到另一個(gè)實(shí)現(xiàn)的時(shí)候。舉例來(lái)說(shuō),Spring對(duì)Hibernate事務(wù)和異常的抽象,以及能夠讓你輕松交換mapper和DAO對(duì)象(實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)功能)的IoC機(jī)制,這兩個(gè)特性可以讓你在不犧牲Hibernate性能的情況下,在你的應(yīng)用程序中隔離Hibernate的相關(guān)代碼。處理DAO的高層次的service代碼不需要知道DAO的具體實(shí)現(xiàn)。這個(gè)方法可以很輕易使用mix-and-match方案互不干擾地實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層(比如在一些地方用Hibernate,一些地方使用JDBC,其他地方使用iBatis),mix-and-match有利于處理遺留下來(lái)的代碼以及利用各種技術(shù)(JDBC,Hibernate,iBatis)的優(yōu)點(diǎn)。
public class ProductDaoImpl implements productDao{ private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public List loadProductsByCategory(final String category) { HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory); return (List) hibernateTemplate.execute( new Hi