1 Action是不是線程安全的?如果不是 有什麼方式可以保證Action的線程安全?如果是,說明原因
不是
聲明局部變量,或者擴展RequestProcessor,讓每次都創建一個Action,或者在spring中用scope=”prototype”來管理
2.MVC,分析一下struts是如何實現MVC的
m:JavaBean 或結合 EJB 組件或者pojo構成
c:Action 來實現
v:一組 JSP 文件及其標簽構成。
3.struts中的幾個關鍵對象的作用(說說幾個關鍵對象的作用)
Action:控制器類,ActionForm:表單對象,DynaValidatorForm:動態form,ActonMapping:配置文件中action節點的信息……
4.說說AOP和IOC的概念以及在spring中是如何應用的
AOP:面向方面編程,ioc:依賴注入;聲明式事務和編程式事務積極一些通用部分
5.Hibernate有哪幾種查詢數據的方式
hql查詢,sql查詢,條件查詢
6.load()和get()的區別
hibernate對於load方法認為該數據在數據庫中一定存在,可以放心的使用代理來延遲加
載,load默認支持延遲加載,在用到對象中的其他屬性數據時才查詢數據庫,但是萬一數據庫中不存在該記錄,只能拋異常
ObjectNotFoundEcception;所說的load方法拋異常是指在使用該對象的數據時,數據庫中不存在該數據時拋異常,而不是在創建這個
對象時。由於session中的緩存對於hibernate來說是個相當廉價的資源,所以在load時會先查一下session緩存看看該id對應的對象
是否存在,不存在則創建代理(load時候之查詢一級緩存,不存在則創建代理)。get()現在一級緩存找,沒有就去二級緩存找,沒有就去數據庫找,沒有
就返回null ;而對於get方法,hibernate一定要獲取到真實的數據,否則返回null。
7.談談hibernate的延遲加載和openSessionInView
延遲加載要在session范圍內,用到的時候再加載;opensessioninview是在web層寫了一個
filter來打開和關閉session,這樣就表示在一次request過程中session一直開著,保證了延遲
加載在session中的這個前提。
8.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。
聲明事務和編程事務
隔離級別:
- DEFAULT使用數據庫默認的隔離級別
- READ_UNCOMMITTED會出現髒讀,不可重復讀和幻影讀問題
- READ_COMMITTED會出現重復讀和幻影讀
- REPEATABLE_READ會出現幻影讀
- SERIALIZABLE最安全,但是代價最大,性能影響極其嚴重
和傳播行:
- REQUIRED存在事務就融入該事務,不存在就創建事務
- SUPPORTS存在事務就融入事務,不存在則不創建事務
- MANDATORY存在事務則融入該事務,不存在,拋異常
- REQUIRES_NEW總是創建新事務
- NOT_SUPPORTED存在事務則掛起,一直執行非事務操作
- NEVER總是執行非事務,如果當前存在事務則拋異常
- NESTED嵌入式事務
9.Hibernate中的update()和saveOrUpdate()的區別.
摘自hibernate說明文檔:
saveOrUpdate()做下面的事:
如果對象已經在本session中持久化了,不做任何事
如果另一個與本session關聯的對象擁有相同的持久化標識(identifier),拋出一個異常
如果對象沒有持久化標識(identifier)屬性,對其調用save()
如果對象的持久標識(identifier)表明其是一個新實例化的對象,對其調用save()
如果對象是附帶版本信息的(通過 或 ) 並且版本屬性的值表明其是一個新實例化的對象,save()它。 否則update() 這個對象
10.Spring對多種ORM框架提供了很好的支持,簡單描述在Spring中使用Hibernate的方法,並結合事務管理。
getHiberanteTemplate裡面提供了save,update,delete,find等方法。
簡單說一個:如果配置了聲明式事務,當執行getHibernateTemplate的各種方法的時候,事務會
自動被加載
如果沒有配置事務,那麼以上操作不會真正的被同步到數據庫,除非配置了hibernate的
autocommit=true
8.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。
spring事務分兩種形式,聲明式事務和編程式事務,spring提供了一個事務的接口
PaltformTractionManager接口,針對不同的事務,spring進行了不同的實現,對hibernate事務
的實現HIbernateTractionManager,對JDBC的JdbcTractionManager,
DataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了三
個方法,獲取事務,提交和回滾的方法。