Java面試--Spring技術要點--Spring資料訪問

來源:互聯網
上載者:User

標籤:spring面試   java   spring   dao   資料訪問   

24  Spring對DAO的支援

Spring對Data Access Objects(DAO)的支援旨在簡化它和資料訪問技術如JDBC,Hibernateor JDO 結合使用。這使我們可以方便切換持久層。編碼時也不用擔心會捕獲每種技術特有的異常。

  • 最佳化了的異常類型體系:細化了資料訪問異常,豐富了異常類型。(都是 Unchecked Exception,這種異常不會變動,採用同一種異常,表示同一種現象,與使用的持久化技術無關)
  • 使用模板回調模式,開發人員不再寫入模式化代碼,簡化編程

不變:資源的擷取,資源的釋放,異常轉化(Spring提供了模板類對此負責)。

變化:SQL,變數,結果集的提取。

25  基於JDBC的DAO(Hibernate類似)

簡化對JDBC的操作

  • 模板負責:JDBC對象的擷取釋放,異常類型的轉化。
  • 開發負責:提供SQL,設定SQL中的變數,提取ResultSet。

應用

  • 核心方法:query()  update()
  • 回調介面:PreparedStatementCreator、PreparedStatementSetter、ResultSetExtractor、RowMapper

DAO中獲得JdbcTemplate的兩種方式:

  1. 給DAO注入JdbcTempate:Bean配置:DataSource->JdbcTemplate(需要bean工廠控制)->DAO
  2. 使DAO類繼承 JdbcDaoSupport:繼承的方法getJdbcTemplate()、Bean配置:DataSource->DAO。

26  Spring+Hibernate訪問資料庫的方式

在Spring中有兩種方式訪問Hibernate:

  • 使用HibernateTemplate和Callback。(推薦)
  • 繼承HibernateDAOSupport。(不推薦)
  • 直接使用SessionFactory(不推薦)

27  通過HibernateDaoSupport將Spring和Hibernate整合

用Spring的SessionFactory調用LocalSessionFactory。整合過程分三步:

  • 配置HibernateSessionFactory。
  • 繼承HibernateDaoSupport實現一個DAO。
  • 在AOP支援的事務中裝配。

28  Spring支援的交易管理類型

Spring支援兩種類型的交易管理:

  • 編程式交易管理:這意味你通過編程的方式管理事務,給你帶來極大的靈活性,但是難維護。
  • 聲明式交易管理:這意味著你可以將業務代碼和交易管理分離,你只需用註解和XML配置來管理事務。

29  Spring交易管理的優點

  • 它為不同的事務API  如JTA,JDBC,Hibernate,JPA和JDO,提供一個不變的編程模式。
  • 它為編程式交易管理提供了一套簡單的API而不是一些複雜的事務API。
  • 它支援聲明式交易管理。
  • 它和Spring各種資料訪問抽象層很好得整合。

30  常用的內建交易管理員實現

  • DataSourceTransactionManager:位於org.springframework.jdbc.datasource包中,資料來源交易管理員,提供對單個javax.sql.DataSource交易管理,用於SpringJDBC抽象架構、iBATIS架構的交易管理;
  • HibernateTransactionManager:位於org.springframework.orm.hibernate3或者hibernate4包中,提供對單個org.hibernate.SessionFactory事務支援,用於整合Hibernate架構時的交易管理;該交易管理員只支援Hibernate3+版本,且Spring3.0+版本只支援Hibernate3.2+版本;
  • JtaTransactionManager:位於org.springframework.transaction.jta包中,提供對分散式交易管理的支援,並將交易管理委託給JavaEE應用伺服器交易管理員;

31  Spring事務的傳播行為(propagation)7個

  1. required:指定當前方法必需在事務環境中運行,如果當前有事務環境就加入當前正在執行的事務環境,如果當前沒有事務,就建立一個事務。這是預設值。
  2. supports:指定當前方法加入當前事務環境,如果當前沒有事務,就以非事務方式執行。
  3. mandatory:指定當前方法必須加入當前事務環境,如果當前沒有事務,就拋出異常。
  4. requires_new:當前方法總是會為自己發起一個新的事務,如果發現當前方法已運行在一個事務中,則原有事務被掛起,自己建立一個屬於自己的事務,直到自己這個方法commit結束,原先的事務才會恢複執行。
  5. not_supported:當前方法以非事務方式執行操作,如果當前存在事務,就把當前事務掛起,等以非事務的狀態運行完,再繼續原來的事務。
  6. never:當前方法絕對不能在事務範圍內執行,如果方法在某個事務範圍內執行,容器就拋異常,只有沒關聯到事務,才正常執行。
  7. nested:指定當前方法執行時,如果已經有一個事務存在,則運行在這個嵌套的事務中。如果當前環境沒有啟動並執行事務,就建立一個事務,並與父事務相互獨立,這個事務擁有多個可以復原的保證點。就是指我自己內部交易回復不會對外部事務造成影響,只對DataSourceTransactionManager交易管理員起效。

32  Spring事務配置屬性詳解(<tx:method >或@Transactional)

表格3  Spring事務配置選項

屬性

類型

預設值

說明

propagation

Propagation枚舉

REQUIRED

事務傳播屬性

isolation

isolation枚舉

DEFAULT(所用資料庫預設層級)

交易隔離等級

readOnly

boolean

false

是否用最佳化的唯讀事務

timeout

int

-1

逾時(秒)

rollbackFor

Class[]

{}

需要復原的異常類

rollbackForClassName

String[]

{}

需要復原的異常類名

noRollbackFor

Class[]

{}

不需要復原的異常類

noRollbackForClassName

String[]

{}

不需要復原的異常類名

http://zhou137520.iteye.com/blog/1675199


Java面試--Spring技術要點--Spring資料訪問

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.