spring教程3應用.ppt_第1頁
spring教程3應用.ppt_第2頁
spring教程3應用.ppt_第3頁
spring教程3應用.ppt_第4頁
spring教程3應用.ppt_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第 三 章,Spring 應用,2,目標,撐握Spring JDBC輔助類 了解Spring DAO 撐握Spring與Hibernate的整合 撐握Spring聲明式事務配置 了解Spring中定時調度的使用 撐握Spring的單元測試,3,Spring JDBC抽象框架提供了對JDBC操作的完整封裝,包括: 指定數據庫連接參數 打開數據庫連接 聲明SQL語句 預編譯并執(zhí)行SQL語句 遍歷查詢結果 處理每一次遍歷操作 處理拋出的任何異常 處理事務 關閉數據庫連接,Spring JDBC,4,Spring JDBC包的構成: org.springframework.jdbc.core 該包定義JDBCTemplate及一些回調接口用于封裝JDBC的常見操作。 org.springframework.jdbc.datasource用于提供數據源綁定。 org.springframework.jdbc.object它提供比core包更高層次的封裝,它操作的數據是可以與數據庫斷開連接的。 org.springframework.jdbc.support提供了一些SQLException的轉換類以及相關的工具類。,Spring JDBC,5,DataSource接口提供了對數據源的封裝。,Spring JDBC Core,示例在Spring注冊一個數據源實例,6,Spring JDBC Core,JDBCTemplate提供了對JDBC操作的封裝 PreparedStatement(接口)用于建立PreparedStatement的回調接口 ResultSetExtractor(接口)用于將Result數據轉換成Java的POJO的回調接口 RowCallbackHandler(接口)用于處理結果集的回調接口,例如刪除記錄集中的行或更新記錄集中的行。 RowMapper(接口)用于將結果集中當前行映射到一個Java對象,7,Spring JDBC 示例,使用JDBCTemplate將查詢結果轉換成二維數組,List rows = (List)this.getJdbcTemplate().query(new PreparedStatementCreator() public PreparedStatement createPreparedStatement(Connection conn) throws SQLException return conn.prepareStatement(“select * from stud“); , new ResultSetExtractor() public Object extractData(ResultSet rs) throws SQLException, DataAccessException /將結果集轉換成二維數組 List rows = new ArrayList(); java.sql.ResultSetMetaData rsm = rs.getMetaData(); while(rs.next() List recls = new ArrayList(); for(int i=1; i=rsm.getColumnCount(); i+) recls.add(rs.getObject(i); rows.add(recls); return rows; );,8,Spring JDBC 示例,快速獲取第一行第一列數據,this.getJdbcTemplate().queryForInt(“select count(*) from stud where sex = ?“, new ObjectF);,執(zhí)行更新,新加或刪除操作,this.getJdbcTemplate().update(“delete from stud where set = ?“, new ObjectF);,執(zhí)行回調方法,this.getJdbcTemplate().execute(new ConnectionCallback() public Object doInConnection(Connection conn) throws SQLException, DataAccessException conn.prepareStatement(“delete from stud“).execute();return null; );,9,Spring JDBC Dao,JdbcDaoSuppor可用于建立自定義DAO的父類。,public class DaoBase extends JdbcDaoSupport ,10,Spring 與Hibernate,Spring提供的LocalSessionFactoryBean可用于注冊Hibernate的SessionFactory。,屬性 hibernateProperties用于指定Hibernate的配置參數 configLocation指定配置文件 mappingResources指定映射文件,11,Spring 與Hibernate,HibernateTemplate用于提供對Hibernate操作的封裝。,HibernateDaoSupport用于提供建立Hibernate DAO的父類。,12,Spring 與Hibernate,Spring提供了OpenSessionFilter用于解決Hibernate的延遲初始化問題,示例在Web.xml中配置OpenSessionFilter, openSessionFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter openSessionFilter /* ,13,Spring 聲明式事務,聲明式事務與編程式的事務本質區(qū)別在于前節(jié)通過配置來聲明事務。 Spring同時支持聲明式事務與編程式事務。 Spring事務抽象接口PlatformTransactionManager 它實現了統(tǒng)一的事務獲取,提交,回滾的方法。 TransactionStatus getTransaction(TransactionDefinition definition) 用于獲取事務。 commit(TransactionStatus status) 用于提交事務 rollback(TransactionStatus status) 用于回滾事務,14,Spring 聲明式事務,Spring針對不同的事務實現提供了不同的事務抽象。 DataSourceTransactionManager提供了對JDBC事務的支持 HibernateTransactionMangager提供了對Hibernate事務的支持 JDOTransactionManager對使用JDO持久化的事務支持 JTATransactionManager使用JTA來管理事務,應用跨多個數據源時使用,15,Spring 事務抽象,事務抽象可作為一個bean在配置文件中聲明,它實際上是針對于不同的ORM機制的事務代理對象。 配置JDBC事務抽象,配置Hibernate事務抽象,16,Spring 編程事務,Spring提供了TransactionTemplate模板類,其使用具體的事務抽象封裝了通用事務操作。 例配置TransactionTemplate并將其注入到業(yè)務類,17,Spring 編程事務,在代碼中使用TransactionTemplate,this.getTrxTemplate().execute(new TransactionCallback() public Object doInTransaction(TransactionStatus ts) try /TODO:在事務中運行的腳本 catch(Exception e) ts.setRollbackOnly();/設置回滾 return null;/正常返回將提供交事務 );,18,Spring 聲明式事務,Spring的聲明式事務是建立在攔截通知之上的,通過配置事務策略決定在方法之前是否開始事務在方法執(zhí)行之后是否提交事務。 TransactionProxyFactoryBean用于產生單個對象的事務代理對象,它默認織入了事務攔截。 TransactionInterceptor Spring提供的事務攔截通知。,19,Spring 聲明式事務,TransactionInterceptor的屬性 transactionManager提定攔截使用的事務抽象 transactionAttributes提定攔截的事務策略,事務策略用于配置事務攔截開始,提交或回滾事務的策略,它由四部分組成: 傳播行為 隔離級別 只讀提示 事務超時,20,Spring 事務策略,傳播行為,聲明事務的邊界,指定何時開始一個事務。 常見的取值如下:,21,Spring 事務策略,事務隔離級別,用于解決事務并發(fā)問題。 常見的取值如下:,22,Spring 聲明式事務,只讀提示,用于指定事務是否只能執(zhí)行只讀操作。 事務超時,提定事務的執(zhí)行時間超時后將自動回滾。 示例配置事務攔截, PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Throwable ,23,Spring 聲明式事務,事務攔截可被用于產生代理對象或使用自動代理織入到目標對象。 示例中展示了將事務攔截織入到名稱以Srv結尾的目標對象中。, trxInterceptor *Srv ,24,Spring 聲明式事務,TransactionProxyFactoryBean用于產生單個對象的事務代理對象。, PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Throwable ,25,Spring2.0 聲明式事務,Spring2.0中引入了注解用于聲明方法的事務 引入事務相關的xml配置元素,指定事務抽象,26,Spring2.0 聲明式事務,在方法前添加Transaction注解用于指定方法的事務策略,Transactional public void addService() ,27,Spring 調度,調度是指按照一定的時間或規(guī)率重復執(zhí)行一項任務。 Spring中的調度是建立在Quartz的基礎之上。 Quartz支持頻率調度及時間點調度兩種方式。 SimpleTriggerBean用于指定按頻率調度。 CronTriggerBean用于指定時間點調度,28,Spring 調度,Spring中建立調度的基本步驟: 建立調度的目標類,目標類是一個繼承了QuartzJobBean的類 在Spring中注冊調度任務,調度任務是一個JobDetailBean的實例,通過它的jobClass屬性指定目標類,通過jobDataAsMap向目標類注入屬性。 配置調度CronTriggerBean或SimpleTriggerBean指定其時間點或頻率 啟動調度,通過注冊SchedulerFactoryBean來實現,它的triggers用于指定待啟動的調度。,29,Spring 調度,示例中注冊了一調度任務, /指定了目標類,每次調試都會建立一個新的實例 /用于向目標類實例注入屬性值key為屬性名 ,30,Spring 調度,示例注冊一個SimpleTriggerBean,每2秒鐘執(zhí)行一次。, /指定調度時間間隔此處為2秒 /指定調度執(zhí)行次數,不指定無窮次 ,31,Spring 調度,示例注冊一個SimpleTriggerBean,每2秒鐘執(zhí)行一次。,SimpleTriggerBean常見屬性 jobDetail指定調度任務為JobDetailBean的實例 repeatInterval指定間隔時間 repeatCount指定次數,不指定無窮次 startDelay指定延遲多少毫秒啟動調度,默認立即 startTime指定某個時間點啟動調試,默認立即,32,Spring 調度,注冊一個CronTriggerBean ,每天早上六點執(zhí)行。, 0 0 6 * * ? * ,CronTriggerBean常見屬性 jobDetail指定調度任務為JobDetailBean的實例 cronExpression指定重復執(zhí)行的時間點,由七個數位表示。1.表示秒,2表示分,3表示小時(0-23),4表示日期(1-31),5.表示月份(1-12),6表示星期(1-7 1為星期天),7表示年(1970-2099),*表示任意,?表示不設置 注:星期與日期不可同時指定,33,Spring 調度,示例注冊一個SchedulerFactoryBean實例,用于啟動所有調度。,34,Spring單元測試建立在Junit測試的基礎之上。 AbstractDependencyInjectionSpringContextTests抽象類繼承了Junit的TestCase,繼承它的測試Spring將自動注入測試實例的屬性。 AbstractTransactionalDataSourceSpringContextTests用于在數據庫測試時,在測試用例執(zhí)行時需要驗證數據庫中的數據,在測試用例執(zhí)行后需要恢復數據庫數據的情形。,Spring單元測試,35,繼承AbstractDependencyInjectionSpringContextTests的測試類需要重載getConfigLocations或getConfigPath方法用于提供Spring配置文件。,Spring單元測試,public class UserDaoTests extends AbstractDependencyInjectionSpringContextTests Override protected String getConfigLocations() return new String“resource/applicationContext.xml“; ,36,Spring單元測試,public class UserDaoTests extends AbstractDependencyInjectionSpringContextTests private UserDao userDao = null; public void setUserDao(UserDao userDao) private JdbcTemplate jt = null; public void setJt(JdbcTemplate jt) protected String getConfigLocations() public void testAddUser() User user = new User(); user.setName

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論