麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

Spring系列第2部分:當Hibernate遇上Spring

2019-11-18 13:00:18
字體:
來源:轉載
供稿:網友

  SPRing AOP
  
  軟件系統通常由多個組件構成,每個組件負責一個特定的功能領域。但是,這些組件也經常承擔它們的核心功能之外的額外責任。系統服務(例如日志、事務治理和安全性)經常發現自己跑到了別的組件的領域里,而這些組件的核心職責是其他事情。結果就是所謂的“代碼糾纏”,或者更簡單點兒說“一團糟”。面向方面編程是一種試圖解決這個問題的編程技術,它把關注點的隔離提升為核心的編程概念。
  
  使用 AOP 時,仍然是在一個地方定義系統的公共功能,但是可以聲明性地定義 如何 和 在哪里 應用這個功能。假如對橫切關注點(例如日志和事務治理)進行了模塊化,那么不用修改每個單獨的類,就可以向代碼中添加新特性。這類模塊化的關注點稱作 方面。
  
  您知道么?
  
  可以在任何 java? 企業版(J2EE) 服務器中使用 Spring 框架的功能。而且,還可以調整它的大多數功能,使其適合不受控環境。Spring 的中心焦點就是支持不被束縛在特定 J2EEE 服務上的可重用業務和數據訪問對象。可以跨 J2EE 環境(Web 或企業 JavaBean(EJB))、獨立應用程序、測試環境等等重用這類對象,而不會有任何麻煩。
  
  以一個企業應用程序為例。這類應用程序通常要求類似于安全性和事務支持的服務。顯然,可以把這些服務的支持直接編寫到要求服務的每個類當中,但是更希望能夠不必為大量事務性上下文編寫同樣的事務處理代碼。假如使用 Spring AOP 進行事務處理,那么可以聲明性地安排適當的方法調用,而不必逐個安排。
  
  Spring AOP 提供了幾個方面,可以為 JavaBean 聲明事務。例如,TransactionProxyFactoryBean 是個方便的代理類,能夠攔截對現有類的方法調用,并把事務上下文應用到事務 bean。在下面的示例中會看到這個類的實際應用。
  
  Hibernate
  
  Spring 框架提供了對 Hibernate、JDO 和 iBATIS SQL Maps 的集成支持。Spring 對 Hibernate 的支持是第一級的,整合了許多 IOC 的方便特性,解決了許多典型的 Hibernate 集成問題。框架對 Hibernate 的支持符合 Spring 通用的事務和數據訪問對象(DAO)異常層次結構。
  
  Spring 為使用選擇的 OR 映射層來創建數據訪問應用程序提供了支持。因為所有東西都設計成一組可重用 JavaBean,所以不管選擇什么技術,都能以庫的格式訪問大多數 Spring 的 OR 映射支持。 applicationContext 或 BeanFactory 內部的 OR 映射的好處是簡化了配置和部署。
  
  Hibernate 是 Java 平臺上一個功能全面的、開源的 OR 映射框架。Hibernate 支持開發符合常規 Java 理念的持久性類 —— 包括關聯、繼續、多態、復合以及 Java 集合框架。Hibernate 查詢語言(HQL)被設計成 SQL 的一個微型面向對象擴展,它是對象和關系世界之間的橋梁。Hibernate 也支持用原始 SQL 或基于 Java 的標準和示例查詢表達查詢。Hibernate 使用 xml(*.hbm.xml) 文件把 Java 類映射到表,把 JavaBean 屬性映射到數據庫表。
  
  通過 JDBC 技術,支持所有的 SQL 數據庫治理系統。Hibernate 與所有流行的 J2EE 應用程序服務器和 Web 容器都很好地集成。
  
  實際示例
  
  一個銀行應用程序示例可以讓您自己看到 Spring AOP 和 Hibernate 一起工作有多么好。銀行帳戶用例答應用戶 (Customer) 在一個事務中打開一個或多個銀行帳戶。用戶可以申請多個銀行帳戶,可以選擇是支票帳戶類型或者是儲蓄帳戶類型。
  
  應用程序數據庫(Cloudscape?)容納所有客戶和帳戶信息。在這個例子中,假設在 Customer 和 Account 類之間存在 1:N 的關聯。在實際生活場景中,關聯可能需要按 m:n 建模,才能支持聯合帳戶。
  
  由于用戶必須可以在一個事務中申請多個帳戶,所以首先要為數據庫交互實現一個 DOA 模式。然后要設置 Spring AOP 的 TransactionProxyFactoryBean,讓它攔截方法調用并聲明性地把事務上下文應用到 DOA。
  
  Hibernate 實踐
  
  在 Spring 框架中,像 JDBC DataSource 或 Hibernate sessionFactory 這樣的資源,在應用程序上下文中可以用 bean 實現。需要訪問資源的應用程序對象只需通過 bean 引用得到這類預先定義好的實例的引用即可(這方面的更多內容在 下一節中)。在清單 1 中,可以看到示例銀行應用程序的一段摘錄:XML 應用程序上下文定義顯示了如何設置 JDBC DataSource,并在上面放一個 Hibernate SessionFactory。
  
  清單 1. JDBC DataSource 和 HibernateSessionFactory 連接
  
  <!-- DataSource Property -->
  <bean id="exampleDataSource"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName">
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>
  </property>
  <property name="url">
  <value>jdbc:derby:springexample;create=true</value>
  </property>
  </bean>
  
  <!-- Database Property -->
  <bean id="exampleHibernateProperties"
  class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="properties">
  <props>
  <prop key="hibernate.hbm2ddl.auto">update</prop>
  <prop
  key="hibernate.dialect">net.sf.hibernate.dialect.DerbyDialect</prop>
  <prop
  key="hibernate.query.substitutions">true 'T', false 'F'</prop>
  <prop key="hibernate.show_sql">false</prop>
  <prop key="hibernate.c3p0.minPoolSize">5</prop>
  <prop key="hibernate.c3p0.maXPoolSize">20</prop>
  <prop key="hibernate.c3p0.timeout">600</prop>
  <prop key="hibernate.c3p0.max_statement">50</prop>
  <prop
  key="hibernate.c3p0.testConnectionOnCheckout">false</prop>
  </props>
  </property>
  </bean>
  
  <!-- Hibernate SessionFactory -->
  <bean id="exampleSessionFactory"
  class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  <property name="dataSource">
  <ref local="exampleDataSource"/>
  </property>
  <property name="hibernateProperties">
  <ref bean="exampleHibernateProperties" />
  </property>
  <!-- OR mapping files. -->
  <property name="mappingResources">
  <list>
  <value>Customer.hbm.xml</value>
  <value>Account.hbm.xml</value>
  </list>
  </property>
  
  </bean>
  
  清單 1 顯示了如何為示例應用程序數據庫(是 Cloudscape)配置數據源 bean (exampleDataSource)。exampleDatasource 被連接到 Spring Hibernate 的 SessionFactory。請注重 *.hbm.xml 指定了示例應用程序的 OR 映射文件。
  
  數據源和會話工廠設置好之后,下一步就是在 DAO 中連接,在 CustomerDAOImpl 示例中,要使用 SessionFactory。接下來,插入 Spring 的 TransactionProxyFactoryBean,它會攔截對應用程序的 CustomerDAOImpl 對象的方法調用,并聲明性地在它上面應用事務。
  
  在 清單 2 的這個示例中,CustomerDAOImpl 類的 addCustomer 方法是作為事務的一部分執行的,有一個事務屬性 PROPAGATION_REQUIRED。這個屬性等價于 EJB 容器的 TX_REQUIRED。假如想讓這個方法一直在事務中運行,可以使用 PROPAGATION_REQUIRED。假如事務已經在運行,那么 bean 方法會加入事務,否則 Spring 的輕量級事務治理器會啟動一個事務。假如想在調用組件服務時總是啟動新事務,可以使用 PROPAGATION_REQUIRES_NEW 屬性。
  
  應用程序的連接完成之后,現在來進一步查看源代碼。
  
  分析這個!
  
  假如以前沒這么做過,那么請 下載這篇文章的源代碼。把源 zip 文件釋放到計算機中的任何位置上,例如 c:/。會創建一個叫作 SpringProjectPart2 的文件夾。src/spring 文件夾包含示例應用程序的 Hibernate 映射文件和 Spring 配置文件。src/springexample/hibernate 文件包含應用程序的源代碼。
  
  在這里會發現兩個類,即 Customer 和 Account,它們用 Hibernate 映射文件映射到兩個表。Customer 類代表客戶信息,Account 代表客戶的帳戶信息。正如前面提到的,我把這兩個類按照 1: N 關系進行建模,即一個 Customer 可以擁有多個 Account。清單 3 顯示了 Customer 對象的 Hibernate 映射文件。
  
  清單 3. Customer 對象的 Hibernate 映射文件
  
  <?xml version="1.0"?>
  
  <!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  
  <hibernate-mapping>
  <class
  name="springexample.hibernate.Customer"
  table="TBL_CUSTOMER"
  dynamic-update="false"
  dynamic-insert="false">
  
  <id
  name="id"
  column="CUSTOMER_ID"
  type="java.lang.Long"
  unsaved-value="-1"
  >
  <generator class="native">
  </generator>
  </id>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品国产99国产精品亚洲 | 国产一区国产二区在线观看 | 欧美a一| 免费h片| 天天色宗合 | 视频一区二区三区在线播放 | 黄色网址在线播放 | 久久久久一区 | 欧美精品一级 | 看免费黄色一级片 | 免费看成人毛片 | 激情视频免费观看 | 国产一区精品视频 | 精品偷拍久久 | 欧美人的天堂一区二区三区 | 91网站免费在线观看 | 久久99在线 | 免费一级欧美大片视频在线 | 国产精选久久 | 羞羞视频免费网站 | 久久视讯 | 日韩欧美视频一区二区三区 | 天天看天天摸天天操 | 毛片免费视频观看 | 欧美成人精品不卡视频在线观看 | 欧美成人一区二区三区 | www.99热视频 | ⅴideo裸体秀hd | 午夜国产在线观看 | 午夜视频在线 | 曰韩黄色片 | 欧美自拍| 日本不卡一区二区三区在线 | 国产亚洲精品久久久久久网站 | 久久艹逼 | 精品国产欧美一区二区 | 欧美成人一区二区三区电影 | 热re91久久精品国产99热 | 免费毛片随便看 | 欧美a在线观看 | av在线等|