亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用ORM工具進行數據訪問

2019-11-18 11:55:12
字體:
來源:轉載
供稿:網友

  簡介
  SPRing在資源治理,DAO實現支持以及實物策略等方面提供了與Hibernate, JDO和iBATIS SQL映射的集成。 對Hibernate,Spring使用了很多IoC的方便的特性提供了一流的支持,幫助你處理很多典型的Hibernate整合的問題。所有的這些都遵守Spring通用的事務和DAO異常體系。
  
  當您選擇使用O/R映射來創建數據訪問應用程序的時候,Spring的增加部分就會向您提供重要的支持。首先你應該了解的是,一旦你使用了Spring對O/R映射的支持,你不需要親自作所有的事情。在決定花費力氣,冒著風險建造類似的內部底層結構之前,我們都建議您考慮和利用Spring的解決方案。不管你使用的是何種技術,大部分的O/R映射支持都可以以library樣式被使用,因為所有的東西都是被設計成一組可重復利用的javaBeans。在applicationContext和BeanFactory中使用更是提供了配置和部署簡單的好處,因此,這一章里的大多數例子都是在ApplicationContext中配置。
  
  使用Spring構建你的ORM應用的好處包括:
  l 避免綁定非凡的技術,答應mix-and-match的實現策略。雖然Hibernate非常強大,靈活,開源而且免費,但它還是使用了自己的特定的API。此外有人也許會爭辯:iBatis更輕便而且在不需要復雜的O/R映射策略的應用中使用也很優秀。能夠選擇的話,使用標準或抽象的API來實現主要的應用需求,通常是更好的。尤其,當你可能會因為功能,性能或其他方面的原因而需要切換到另一個實現的時候。舉例來說,Spring對Hibernate事務和異常的抽象,以及能夠讓你輕松交換mapper和DAO對象(實現數據訪問功能)的IoC機制,這兩個特性可以讓你在不犧牲Hibernate性能的情況下,在你的應用程序中隔離Hibernate的相關代碼。處理DAO的高層次的service代碼不需要知道DAO的具體實現。這個方法可以很輕易使用mix-and-match方案互不干擾地實現數據訪問層(比如在一些地方用Hibernate,一些地方使用JDBC,其他地方使用iBatis),mix-and-match有利于處理遺留下來的代碼以及利用各種技術(JDBC,Hibernate,iBatis)的優點。
  
  測試簡單
  Spring的IoC使得很輕易替換掉不同的實現,Hibernate sessionFacotory的位置,datasource, 事務治理, 映射對象的實現。這樣就很輕易隔離測試持久化相關代碼的各個部分。
  l 普通的資源治理。Spring的application context能夠處理諸如Hibernate 的SessionFactory, JDBC的datasource,iBatis的SQLMaps配置對象以及其他相關資源的定位和配置。這使得這些配置的值很輕易被治理和修改。Spring提供了有效,簡單和安全的Hibernate Session處理。一般的使用Hibernate的代碼則需要使用同一個Hibernate Session對象以確保有效和恰當地事務處理。而Spring讓我們可以很輕易透明地創建和綁定一個session到當前線程;你可以使用以下兩種辦法之一:聲明式的AOP方法攔截器,或通過使用一個外部的template包裝類在Java代碼層次實現。這樣,Spring就解決了在很多Hibernate論壇上出現的使用問題。
  
  異常包裝
  Spring能夠包裝Hibernate異常,把它們從專有的,checked exception變為一組抽象的runtime exception。這樣你就可以僅僅在恰當的層處理大部分的不可恢復的異常,使你避免了很多討厭的catch/throw以及異常聲明。你還是可以在你需要的地方捕捉和處理異常?;叵胍幌翵DBC異常(包括與DB相關的方言)被轉變為同樣的異常體系,這就意味著你可以在一致的編程模型中處理JDBC操作。
  l 綜合的事務治理。Spring答應你包裝你的ORM代碼,通過使用聲明式的AOP方法攔截器或者在代碼級別使用外部的template包裝類。不管使用哪一種,事務相關的語義都會為你處理,萬一有異常發生也會幫你做適當的事務操作(比如rollback)。就象我們下面要討論的一樣,你能夠使用和替換各種transaction managers,卻不會使你的Hibernate相關的代碼受到影響。更好的是,JDBC相關的代碼可以完全和Hibernate代碼integrate transactionaly。這對于處理那些沒有用Hibernate或iBatis實現的功能非常有用。
  
  1.2.Hibernate
  1.2.1.資源治理
  典型的應用經常會被重復的資源治理代碼搞胡亂。很多項目嘗試創造自己的方案解決這個問題,有時會為了編程方便犧牲適當的故障處理。對于恰當的資源處理Spring提倡令人矚目的簡單的解決方案:使用templating的IoC,比如基礎的class和回調接口,或者提供AOP攔截器?;A的類負責固定的資源處理,以及將特定的異常轉換為unchecked異常體系。Spring引進了DAO異常體系,可適用于任何數據訪問策略。
  對于直接使用JDBC的情況,前面章節提到的JdbcTemplate類負責處理connection,正確地把SQLExeption變為DataaccessException體系(包括將與數據庫相關的SQL錯誤代碼變成有意義的異常類)。它同時支持JTA和JDBC事務,通過它們各自的Spring transaction managers。
  Spring同樣也提供了對Hibernate和JDO的支持:一個HibernateTemplate/JdoTemplate類似于JdbcTemplate,HibernateInterceptor/JdoInterceptor,以及一個Hibernate/JDO transaction manager。主要的目的是:能夠清楚地劃分應用層次而不管使用何種數據訪問和事務技術;使應用對象之間的耦合松散。業務對象(BO)不再依靠于數據訪問和事務策略;不再有硬編碼的資源lookup;不再有難于替換的singletons;不再有自定義的服務注冊。一個簡單且堅固的方案連接了應用對象,并且使它們可重用盡可能地不依靠容器。雖然所有的數據訪問技術都能獨立使用,但是與Spring application context結合更好一些,它提供了基于xml的配置和普通的與Spring 無關的JavaBean實例。在典型的Spring app中,很多重要的對象都是JavaBeans:數據訪問template,數據訪問對象(使用template),transaction managers, 業務對象(使用數據訪問對象和transaction managers),web view resolvers, web controller(使用業務對象)等等。
  
  1.2.2.在application context中定義資源
  為了避免將應用對象貼緊硬編碼的資源lookup,Spring答應你像定義普通bean一樣在application context中定義諸如JDBC DataSource,Hibernate SessionFactory的資源。需要訪問這些資源的應用對象只需要持有這些預定義實例的引用。下面的代碼演示如何創建一個JDBC DataSource和Hibernate SessionFactory:
  <beans>
  <bean id="myDataSource"
  class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName">
  <value>java:comp/env/jdbc/myds</value>
  </property>
  </bean>
  <bean id="mySessionFactory"
  class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  <property name="mappingResources">
  <list>
  <value>prodUCt.hbm.xml</value>
  </list>
  </property>
  <property name="hibernateProperties">
  <props>
  <prop key="hibernate.dialect">
  net.sf.hibernate.dialect.MySQLDialect
  </prop>
  </props>
  </property>
  <property name="dataSource">
  <ref bean="myDataSource"/>
  </property>
  </bean>
  ……
  </beans>
  你可以將一個JNDI定位的DataSource換為一個本地定義的如DBCP的BasicDataSource,如下面的代碼:
  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
  <value>org.hsqldb.jdbcDriver</value>
  </property>
  <property name="url">
  <value>jdbc:hsqldb:hsql://localhost:9001</value>
  </property>
  <property name="username">
  <value>sa</value>
  </property>
  <property name="passWord">
  <value></value>
  </property>
  </bean>
  
  當然你也可以把本地的SessionFactory換為JNDI定位的,但是假如不是在EJB上下文中,這是不需要的。(查看“容器資源 vs 本地資源”一節)
  
  1.2.3.反轉控制:Template和Callback
  對于可以成為定制的數據訪問對象或業務對象的方法來說,基本的模板編程模型看起來像下面所示的代碼那樣。對于外部對象沒有任何實現特定接口的要求,它只需要提供一個Hibernate的SessionFacotry。它可以從任何地方得到,比較適宜的方法是作為從Spring 的application context中得到的bean引用:通過簡單的setSessionFactory這個bean屬性setter。下面的代碼顯示了在application context中一個DAO的定義,它引用了上面定義的SessionFactory,同時展示了一個DAO方法的具體實現。
  <beans>
  <bean id=”myProductDao” class=”product.ProductDaoImpl”>
  <property name=”sessionFactory”>
  <ref bean=”mySessionFactory”/>
  </property>
  </bean>
  ….
  </beans>
  
  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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲一区二区三区| 国产日韩欧美自拍| 欧美在线精品免播放器视频| 欧美在线国产精品| 日韩精品在线私人| 久久人人爽人人| 成人国产在线视频| 成人a视频在线观看| 欧美亚洲国产成人精品| 欧美激情视频一区二区三区不卡| 欧美精品电影免费在线观看| 亚洲偷熟乱区亚洲香蕉av| 国产在线视频一区| 中文字幕在线国产精品| 成人写真福利网| 成人a级免费视频| 91香蕉国产在线观看| 国产午夜精品视频免费不卡69堂| 国产精品嫩草影院久久久| 欧美劲爆第一页| 欧美在线日韩在线| 国产91网红主播在线观看| 欧美日韩国产影院| 国产欧美一区二区三区久久人妖| 久久久久久久久久久久久久久久久久av| 成人美女免费网站视频| 成人妇女淫片aaaa视频| xxxx欧美18另类的高清| 成人在线播放av| 一区二区国产精品视频| 国产v综合ⅴ日韩v欧美大片| 91在线高清视频| 国产精品久久久久久久app| 正在播放亚洲1区| 性欧美办公室18xxxxhd| 欧美激情精品久久久久久免费印度| 欧美在线一区二区三区四| 欧美激情xxxxx| 欧美精品成人91久久久久久久| 亚洲国产黄色片| 日韩精品在线观看一区二区| 国产激情视频一区| 国产精品18久久久久久首页狼| 欧美日韩国产精品| 奇米一区二区三区四区久久| 亚洲人成网站在线播| 欲色天天网综合久久| 成人精品一区二区三区电影黑人| 久久精品国产欧美激情| 97人人爽人人喊人人模波多| 青青草国产精品一区二区| 成人h视频在线观看播放| 日韩免费在线免费观看| 欧美精品激情在线| 国产精品美女免费视频| 亚洲精品理论电影| 亚洲综合av影视| 91久久在线观看| 久久亚洲电影天堂| 亚洲视频777| 亚洲欧洲日产国产网站| 亚洲一区中文字幕在线观看| 韩剧1988免费观看全集| 97色在线观看| 欧美在线性爱视频| 国产噜噜噜噜噜久久久久久久久| 色婷婷综合久久久久中文字幕1| 久久大大胆人体| 亚洲性线免费观看视频成熟| 日韩欧美在线网址| 久久男人av资源网站| 成人免费黄色网| 久久久久久18| 亚洲成人av在线| 国产成人精品在线| 亚洲精品国产精品自产a区红杏吧| 国产精品视频久| 国产精品69久久| 亚洲国产精品视频在线观看| 97在线看免费观看视频在线观看| 深夜精品寂寞黄网站在线观看| 国产精品欧美激情在线播放| 国产精品678| 亚洲自拍偷拍福利| 国产精品1区2区在线观看| 成人黄色在线免费| 91久久国产综合久久91精品网站| 丰满岳妇乱一区二区三区| 成人激情视频在线观看| 91精品国产电影| 在线播放日韩精品| 欧美成人在线免费视频| 91精品91久久久久久| 久久综合网hezyo| 亚洲精品久久久久久久久久久| 国产日韩综合一区二区性色av| 欧美激情一级欧美精品| 青青久久aⅴ北条麻妃| 亚洲视频欧美视频| 亚洲成av人乱码色午夜| 亚洲free性xxxx护士hd| 久久久99久久精品女同性| 欧美午夜电影在线| 国产精品jizz在线观看麻豆| 亚洲国产高清福利视频| 操91在线视频| 一区二区三区国产视频| 狠狠躁夜夜躁久久躁别揉| 日日狠狠久久偷偷四色综合免费| 一本色道久久88综合日韩精品| 精品日韩中文字幕| 国产亚洲精品久久| 日韩国产一区三区| 91精品久久久久久久久青青| 成人福利网站在线观看| 777午夜精品福利在线观看| 欧美日韩国产中文字幕| 日韩男女性生活视频| 亚洲另类图片色| 黄色成人在线播放| 成人美女免费网站视频| 在线观看日韩欧美| www.日韩视频| 久久综合久久八八| 91国产美女在线观看| 欧美高清在线观看| 97精品一区二区视频在线观看| 国产精品视频免费在线观看| 欧美一级淫片丝袜脚交| 欧美性色视频在线| 色狠狠av一区二区三区香蕉蜜桃| 日韩在线观看免费av| 国产精品热视频| 亚洲午夜久久久影院| 国内免费久久久久久久久久久| 亚洲天堂一区二区三区| 欧美成人合集magnet| 久久天天躁狠狠躁夜夜躁2014| 国产乱人伦真实精品视频| 欧美福利视频在线| 色悠久久久久综合先锋影音下载| 亚洲视频视频在线| 欧美做受高潮电影o| 久久久久久久成人| 97视频免费看| 亚洲品质视频自拍网| 欧美国产日韩精品| 久久久成人精品| 亚洲最新视频在线| 日韩在线观看av| 日本a级片电影一区二区| 狠狠色噜噜狠狠狠狠97| 精品久久久一区二区| 8050国产精品久久久久久| 国产激情999| 日韩免费av片在线观看| 欧美亚洲一级片| 91久久在线观看| 亚洲成**性毛茸茸| 亚洲欧美国产精品| 欧美理论在线观看| 隔壁老王国产在线精品| 91视频-88av| 欧美成人精品h版在线观看|