




已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第 三 章,Spring 應(yīng)用,2,目標(biāo),撐握Spring JDBC輔助類 了解Spring DAO 撐握Spring與Hibernate的整合 撐握Spring聲明式事務(wù)配置 了解Spring中定時(shí)調(diào)度的使用 撐握Spring的單元測(cè)試,3,Spring JDBC抽象框架提供了對(duì)JDBC操作的完整封裝,包括: 指定數(shù)據(jù)庫(kù)連接參數(shù) 打開數(shù)據(jù)庫(kù)連接 聲明SQL語(yǔ)句 預(yù)編譯并執(zhí)行SQL語(yǔ)句 遍歷查詢結(jié)果 處理每一次遍歷操作 處理拋出的任何異常 處理事務(wù) 關(guān)閉數(shù)據(jù)庫(kù)連接,Spring JDBC,4,Spring JDBC包的構(gòu)成: org.springframework.jdbc.core 該包定義JDBCTemplate及一些回調(diào)接口用于封裝JDBC的常見操作。 org.springframework.jdbc.datasource用于提供數(shù)據(jù)源綁定。 org.springframework.jdbc.object它提供比core包更高層次的封裝,它操作的數(shù)據(jù)是可以與數(shù)據(jù)庫(kù)斷開連接的。 org.springframework.jdbc.support提供了一些SQLException的轉(zhuǎn)換類以及相關(guān)的工具類。,Spring JDBC,5,DataSource接口提供了對(duì)數(shù)據(jù)源的封裝。,Spring JDBC Core,示例在Spring注冊(cè)一個(gè)數(shù)據(jù)源實(shí)例,6,Spring JDBC Core,JDBCTemplate提供了對(duì)JDBC操作的封裝 PreparedStatement(接口)用于建立PreparedStatement的回調(diào)接口 ResultSetExtractor(接口)用于將Result數(shù)據(jù)轉(zhuǎn)換成Java的POJO的回調(diào)接口 RowCallbackHandler(接口)用于處理結(jié)果集的回調(diào)接口,例如刪除記錄集中的行或更新記錄集中的行。 RowMapper(接口)用于將結(jié)果集中當(dāng)前行映射到一個(gè)Java對(duì)象,7,Spring JDBC 示例,使用JDBCTemplate將查詢結(jié)果轉(zhuǎn)換成二維數(shù)組,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 /將結(jié)果集轉(zhuǎn)換成二維數(shù)組 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 示例,快速獲取第一行第一列數(shù)據(jù),this.getJdbcTemplate().queryForInt(“select count(*) from stud where sex = ?“, new ObjectF);,執(zhí)行更新,新加或刪除操作,this.getJdbcTemplate().update(“delete from stud where set = ?“, new ObjectF);,執(zhí)行回調(diào)方法,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可用于注冊(cè)Hibernate的SessionFactory。,屬性 hibernateProperties用于指定Hibernate的配置參數(shù) configLocation指定配置文件 mappingResources指定映射文件,11,Spring 與Hibernate,HibernateTemplate用于提供對(duì)Hibernate操作的封裝。,HibernateDaoSupport用于提供建立Hibernate DAO的父類。,12,Spring 與Hibernate,Spring提供了OpenSessionFilter用于解決Hibernate的延遲初始化問題,示例在Web.xml中配置OpenSessionFilter, openSessionFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter openSessionFilter /* ,13,Spring 聲明式事務(wù),聲明式事務(wù)與編程式的事務(wù)本質(zhì)區(qū)別在于前節(jié)通過配置來聲明事務(wù)。 Spring同時(shí)支持聲明式事務(wù)與編程式事務(wù)。 Spring事務(wù)抽象接口PlatformTransactionManager 它實(shí)現(xiàn)了統(tǒng)一的事務(wù)獲取,提交,回滾的方法。 TransactionStatus getTransaction(TransactionDefinition definition) 用于獲取事務(wù)。 commit(TransactionStatus status) 用于提交事務(wù) rollback(TransactionStatus status) 用于回滾事務(wù),14,Spring 聲明式事務(wù),Spring針對(duì)不同的事務(wù)實(shí)現(xiàn)提供了不同的事務(wù)抽象。 DataSourceTransactionManager提供了對(duì)JDBC事務(wù)的支持 HibernateTransactionMangager提供了對(duì)Hibernate事務(wù)的支持 JDOTransactionManager對(duì)使用JDO持久化的事務(wù)支持 JTATransactionManager使用JTA來管理事務(wù),應(yīng)用跨多個(gè)數(shù)據(jù)源時(shí)使用,15,Spring 事務(wù)抽象,事務(wù)抽象可作為一個(gè)bean在配置文件中聲明,它實(shí)際上是針對(duì)于不同的ORM機(jī)制的事務(wù)代理對(duì)象。 配置JDBC事務(wù)抽象,配置Hibernate事務(wù)抽象,16,Spring 編程事務(wù),Spring提供了TransactionTemplate模板類,其使用具體的事務(wù)抽象封裝了通用事務(wù)操作。 例配置TransactionTemplate并將其注入到業(yè)務(wù)類,17,Spring 編程事務(wù),在代碼中使用TransactionTemplate,this.getTrxTemplate().execute(new TransactionCallback() public Object doInTransaction(TransactionStatus ts) try /TODO:在事務(wù)中運(yùn)行的腳本 catch(Exception e) ts.setRollbackOnly();/設(shè)置回滾 return null;/正常返回將提供交事務(wù) );,18,Spring 聲明式事務(wù),Spring的聲明式事務(wù)是建立在攔截通知之上的,通過配置事務(wù)策略決定在方法之前是否開始事務(wù)在方法執(zhí)行之后是否提交事務(wù)。 TransactionProxyFactoryBean用于產(chǎn)生單個(gè)對(duì)象的事務(wù)代理對(duì)象,它默認(rèn)織入了事務(wù)攔截。 TransactionInterceptor Spring提供的事務(wù)攔截通知。,19,Spring 聲明式事務(wù),TransactionInterceptor的屬性 transactionManager提定攔截使用的事務(wù)抽象 transactionAttributes提定攔截的事務(wù)策略,事務(wù)策略用于配置事務(wù)攔截開始,提交或回滾事務(wù)的策略,它由四部分組成: 傳播行為 隔離級(jí)別 只讀提示 事務(wù)超時(shí),20,Spring 事務(wù)策略,傳播行為,聲明事務(wù)的邊界,指定何時(shí)開始一個(gè)事務(wù)。 常見的取值如下:,21,Spring 事務(wù)策略,事務(wù)隔離級(jí)別,用于解決事務(wù)并發(fā)問題。 常見的取值如下:,22,Spring 聲明式事務(wù),只讀提示,用于指定事務(wù)是否只能執(zhí)行只讀操作。 事務(wù)超時(shí),提定事務(wù)的執(zhí)行時(shí)間超時(shí)后將自動(dòng)回滾。 示例配置事務(wù)攔截, PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Throwable ,23,Spring 聲明式事務(wù),事務(wù)攔截可被用于產(chǎn)生代理對(duì)象或使用自動(dòng)代理織入到目標(biāo)對(duì)象。 示例中展示了將事務(wù)攔截織入到名稱以Srv結(jié)尾的目標(biāo)對(duì)象中。, trxInterceptor *Srv ,24,Spring 聲明式事務(wù),TransactionProxyFactoryBean用于產(chǎn)生單個(gè)對(duì)象的事務(wù)代理對(duì)象。, PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Throwable ,25,Spring2.0 聲明式事務(wù),Spring2.0中引入了注解用于聲明方法的事務(wù) 引入事務(wù)相關(guān)的xml配置元素,指定事務(wù)抽象,26,Spring2.0 聲明式事務(wù),在方法前添加Transaction注解用于指定方法的事務(wù)策略,Transactional public void addService() ,27,Spring 調(diào)度,調(diào)度是指按照一定的時(shí)間或規(guī)率重復(fù)執(zhí)行一項(xiàng)任務(wù)。 Spring中的調(diào)度是建立在Quartz的基礎(chǔ)之上。 Quartz支持頻率調(diào)度及時(shí)間點(diǎn)調(diào)度兩種方式。 SimpleTriggerBean用于指定按頻率調(diào)度。 CronTriggerBean用于指定時(shí)間點(diǎn)調(diào)度,28,Spring 調(diào)度,Spring中建立調(diào)度的基本步驟: 建立調(diào)度的目標(biāo)類,目標(biāo)類是一個(gè)繼承了QuartzJobBean的類 在Spring中注冊(cè)調(diào)度任務(wù),調(diào)度任務(wù)是一個(gè)JobDetailBean的實(shí)例,通過它的jobClass屬性指定目標(biāo)類,通過jobDataAsMap向目標(biāo)類注入屬性。 配置調(diào)度CronTriggerBean或SimpleTriggerBean指定其時(shí)間點(diǎn)或頻率 啟動(dòng)調(diào)度,通過注冊(cè)SchedulerFactoryBean來實(shí)現(xiàn),它的triggers用于指定待啟動(dòng)的調(diào)度。,29,Spring 調(diào)度,示例中注冊(cè)了一調(diào)度任務(wù), /指定了目標(biāo)類,每次調(diào)試都會(huì)建立一個(gè)新的實(shí)例 /用于向目標(biāo)類實(shí)例注入屬性值key為屬性名 ,30,Spring 調(diào)度,示例注冊(cè)一個(gè)SimpleTriggerBean,每2秒鐘執(zhí)行一次。, /指定調(diào)度時(shí)間間隔此處為2秒 /指定調(diào)度執(zhí)行次數(shù),不指定無窮次 ,31,Spring 調(diào)度,示例注冊(cè)一個(gè)SimpleTriggerBean,每2秒鐘執(zhí)行一次。,SimpleTriggerBean常見屬性 jobDetail指定調(diào)度任務(wù)為JobDetailBean的實(shí)例 repeatInterval指定間隔時(shí)間 repeatCount指定次數(shù),不指定無窮次 startDelay指定延遲多少毫秒啟動(dòng)調(diào)度,默認(rèn)立即 startTime指定某個(gè)時(shí)間點(diǎn)啟動(dòng)調(diào)試,默認(rèn)立即,32,Spring 調(diào)度,注冊(cè)一個(gè)CronTriggerBean ,每天早上六點(diǎn)執(zhí)行。, 0 0 6 * * ? * ,CronTriggerBean常見屬性 jobDetail指定調(diào)度任務(wù)為JobDetailBean的實(shí)例 cronExpression指定重復(fù)執(zhí)行的時(shí)間點(diǎn),由七個(gè)數(shù)位表示。1.表示秒,2表示分,3表示小時(shí)(0-23),4表示日期(1-31),5.表示月份(1-12),6表示星期(1-7 1為星期天),7表示年(1970-2099),*表示任意,?表示不設(shè)置 注:星期與日期不可同時(shí)指定,33,Spring 調(diào)度,示例注冊(cè)一個(gè)SchedulerFactoryBean實(shí)例,用于啟動(dòng)所有調(diào)度。,34,Spring單元測(cè)試建立在Junit測(cè)試的基礎(chǔ)之上。 AbstractDependencyInjectionSpringContextTests抽象類繼承了Junit的TestCase,繼承它的測(cè)試Spring將自動(dòng)注入測(cè)試實(shí)例的屬性。 AbstractTransactionalDataSourceSpringContextTests用于在數(shù)據(jù)庫(kù)測(cè)試時(shí),在測(cè)試用例執(zhí)行時(shí)需要驗(yàn)證數(shù)據(jù)庫(kù)中的數(shù)據(jù),在測(cè)試用例執(zhí)行后需要恢復(fù)數(shù)據(jù)庫(kù)數(shù)據(jù)的情形。,Spring單元測(cè)試,35,繼承AbstractDependencyInjectionSpringContextTests的測(cè)試類需要重載getConfigLocations或getConfigPath方法用于提供Spring配置文件。,Spring單元測(cè)試,public class UserDaoTests extends AbstractDependencyInjectionSpringContextTests Override protected String getConfigLocations() return new String“resource/applicationContext.xml“; ,36,Spring單元測(cè)試,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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 面向2025年生鮮新零售行業(yè)供應(yīng)鏈優(yōu)化與冷鏈物流創(chuàng)新實(shí)踐研究報(bào)告001
- 基層醫(yī)療機(jī)構(gòu)信息化建設(shè)中的基層衛(wèi)生人才隊(duì)伍信息化能力提升報(bào)告
- 2025年醫(yī)院信息化建設(shè)電子病歷系統(tǒng)優(yōu)化策略研究報(bào)告001
- 2025年醫(yī)院電子病歷系統(tǒng)優(yōu)化與醫(yī)療信息化產(chǎn)業(yè)生態(tài)協(xié)同創(chuàng)新模式實(shí)踐報(bào)告
- 2025年醫(yī)院電子病歷系統(tǒng)功能優(yōu)化及用戶體驗(yàn)提升報(bào)告001
- 2025年醫(yī)藥市場(chǎng)前景展望:仿制藥一致性評(píng)價(jià)下的產(chǎn)業(yè)升級(jí)路徑
- 咖啡連鎖品牌2025年市場(chǎng)布局:咖啡店品牌戰(zhàn)略規(guī)劃與市場(chǎng)研究報(bào)告
- 醫(yī)療器械臨床試驗(yàn)質(zhì)量管理規(guī)范化2025年實(shí)施現(xiàn)狀報(bào)告
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)模式下的創(chuàng)新項(xiàng)目管理報(bào)告
- 數(shù)字孿生視角下2025年城市規(guī)劃與建設(shè)中的智慧城市交通流量管理優(yōu)化與評(píng)估報(bào)告
- 品管圈QCC成果匯報(bào)提高患者健康教育知曉率
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)項(xiàng)目工程建設(shè)進(jìn)度計(jì)劃與措施
- 西方經(jīng)濟(jì)學(xué)-馬工程重點(diǎn)教材-第16章
- 人工智能安全ppt
- 綜述論文(腸內(nèi)營(yíng)養(yǎng)的臨床應(yīng)用及護(hù)理進(jìn)展)
- 北京市工傷保險(xiǎn)醫(yī)療費(fèi)用手工報(bào)銷申報(bào)表
- 2022-2023學(xué)年四川省成都市高新區(qū)八年級(jí)(下)期末語(yǔ)文試卷(含解析)
- 2023年廈門大學(xué)強(qiáng)基計(jì)劃招生考試數(shù)學(xué)試題真題(含答案)
- 2023年職業(yè)技能-配網(wǎng)不停電帶電作業(yè)考試參考題庫(kù)(高頻真題版)附答案
- O型密封圈的選型設(shè)計(jì)計(jì)算參考
- 食品供貨方案(完整版)
評(píng)論
0/150
提交評(píng)論