spring教程3应用.ppt_第1页
spring教程3应用.ppt_第2页
spring教程3应用.ppt_第3页
spring教程3应用.ppt_第4页
spring教程3应用.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章,Spring应用,2,目标,撑握SpringJDBC辅助类了解SpringDAO撑握Spring与Hibernate的整合撑握Spring声明式事务配置了解Spring中定时调度的使用撑握Spring的单元测试,3,SpringJDBC抽象框架提供了对JDBC操作的完整封装,包括:指定数据库连接参数打开数据库连接声明SQL语句预编译并执行SQL语句遍历查询结果处理每一次遍历操作处理抛出的任何异常处理事务关闭数据库连接,SpringJDBC,4,SpringJDBC包的构成:org.springframework.jdbc.core该包定义JDBCTemplate及一些回调接口用于封装JDBC的常见操作。org.springframework.jdbc.datasource用于提供数据源绑定。org.springframework.jdbc.object它提供比core包更高层次的封装,它操作的数据是可以与数据库断开连接的。org.springframework.jdbc.support提供了一些SQLException的转换类以及相关的工具类。,SpringJDBC,5,DataSource接口提供了对数据源的封装。,SpringJDBCCore,示例在Spring注册一个数据源实例,6,SpringJDBCCore,JDBCTemplate提供了对JDBC操作的封装PreparedStatement(接口)用于建立PreparedStatement的回调接口ResultSetExtractor(接口)用于将Result数据转换成Java的POJO的回调接口RowCallbackHandler(接口)用于处理结果集的回调接口,例如删除记录集中的行或更新记录集中的行。RowMapper(接口)用于将结果集中当前行映射到一个Java对象,7,SpringJDBC示例,使用JDBCTemplate将查询结果转换成二维数组,Listrows=(List)this.getJdbcTemplate().query(newPreparedStatementCreator()publicPreparedStatementcreatePreparedStatement(Connectionconn)throwsSQLExceptionreturnconn.prepareStatement(select*fromstud);,newResultSetExtractor()publicObjectextractData(ResultSetrs)throwsSQLException,DataAccessException/将结果集转换成二维数组Listrows=newArrayList();java.sql.ResultSetMetaDatarsm=rs.getMetaData();while(rs.next()Listrecls=newArrayList();for(inti=1;i=rsm.getColumnCount();i+)recls.add(rs.getObject(i);rows.add(recls);returnrows;);,8,SpringJDBC示例,快速获取第一行第一列数据,this.getJdbcTemplate().queryForInt(selectcount(*)fromstudwheresex=?,newObjectF);,执行更新,新加或删除操作,this.getJdbcTemplate().update(deletefromstudwhereset=?,newObjectF);,执行回调方法,this.getJdbcTemplate().execute(newConnectionCallback()publicObjectdoInConnection(Connectionconn)throwsSQLException,DataAccessExceptionconn.prepareStatement(deletefromstud).execute();returnnull;);,9,SpringJDBCDao,JdbcDaoSuppor可用于建立自定义DAO的父类。,publicclassDaoBaseextendsJdbcDaoSupport,10,Spring与Hibernate,Spring提供的LocalSessionFactoryBean可用于注册Hibernate的SessionFactory。,属性hibernateProperties用于指定Hibernate的配置参数configLocation指定配置文件mappingResources指定映射文件,11,Spring与Hibernate,HibernateTemplate用于提供对Hibernate操作的封装。,HibernateDaoSupport用于提供建立HibernateDAO的父类。,12,Spring与Hibernate,Spring提供了OpenSessionFilter用于解决Hibernate的延迟初始化问题,示例在Web.xml中配置OpenSessionFilter,openSessionFilterorg.springframework.orm.hibernate3.support.OpenSessionInViewFilteropenSessionFilter/*,13,Spring声明式事务,声明式事务与编程式的事务本质区别在于前节通过配置来声明事务。Spring同时支持声明式事务与编程式事务。Spring事务抽象接口PlatformTransactionManager它实现了统一的事务获取,提交,回滚的方法。TransactionStatusgetTransaction(TransactionDefinitiondefinition)用于获取事务。commit(TransactionStatusstatus)用于提交事务rollback(TransactionStatusstatus)用于回滚事务,14,Spring声明式事务,Spring针对不同的事务实现提供了不同的事务抽象。DataSourceTransactionManager提供了对JDBC事务的支持HibernateTransactionMangager提供了对Hibernate事务的支持JDOTransactionManager对使用JDO持久化的事务支持JTATransactionManager使用JTA来管理事务,应用跨多个数据源时使用,15,Spring事务抽象,事务抽象可作为一个bean在配置文件中声明,它实际上是针对于不同的ORM机制的事务代理对象。配置JDBC事务抽象,配置Hibernate事务抽象,16,Spring编程事务,Spring提供了TransactionTemplate模板类,其使用具体的事务抽象封装了通用事务操作。例配置TransactionTemplate并将其注入到业务类,17,Spring编程事务,在代码中使用TransactionTemplate,this.getTrxTemplate().execute(newTransactionCallback()publicObjectdoInTransaction(TransactionStatusts)try/TODO:在事务中运行的脚本catch(Exceptione)ts.setRollbackOnly();/设置回滚returnnull;/正常返回将提供交事务);,18,Spring声明式事务,Spring的声明式事务是建立在拦截通知之上的,通过配置事务策略决定在方法之前是否开始事务在方法执行之后是否提交事务。TransactionProxyFactoryBean用于产生单个对象的事务代理对象,它默认织入了事务拦截。TransactionInterceptorSpring提供的事务拦截通知。,19,Spring声明式事务,TransactionInterceptor的属性transactionManager提定拦截使用的事务抽象transactionAttributes提定拦截的事务策略,事务策略用于配置事务拦截开始,提交或回滚事务的策略,它由四部分组成:传播行为隔离级别只读提示事务超时,20,Spring事务策略,传播行为,声明事务的边界,指定何时开始一个事务。常见的取值如下:,21,Spring事务策略,事务隔离级别,用于解决事务并发问题。常见的取值如下:,22,Spring声明式事务,只读提示,用于指定事务是否只能执行只读操作。事务超时,提定事务的执行时间超时后将自动回滚。示例配置事务拦截,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注解用于指定方法的事务策略,TransactionalpublicvoidaddService(),27,Spring调度,调度是指按照一定的时间或规率重复执行一项任务。Spring中的调度是建立在Quartz的基础之上。Quartz支持频率调度及时间点调度两种方式。SimpleTriggerBean用于指定按频率调度。CronTriggerBean用于指定时间点调度,28,Spring调度,Spring中建立调度的基本步骤:建立调度的目标类,目标类是一个继承了QuartzJobBean的类在Spring中注册调度任务,调度任务是一个JobDetailBean的实例,通过它的jobClass属性指定目标类,通过jobDataAsMap向目标类注入属性。配置调度CronTriggerBean或SimpleTriggerBean指定其时间点或频率启动调度,通过注册SchedulerFactoryBean来实现,它的triggers用于指定待启动的调度。,29,Spring调度,示例中注册了一调度任务,/指定了目标类,每次调试都会建立一个新的实例/用于向目标类实例注入属性值key为属性名,30,Spring调度,示例注册一个SimpleTriggerBean,每2秒钟执行一次。,/指定调度时间间隔此处为2秒/指定调度执行次数,不指定无穷次,31,Spring调度,示例注册一个SimpleTriggerBean,每2秒钟执行一次。,SimpleTriggerBean常见属性jobDetail指定调度任务为JobDetailBean的实例repeatInterval指定间隔时间repeatCount指定次数,不指定无穷次startDelay指定延迟多少毫秒启动调度,默认立即startTime指定某个时间点启动调试,默认立即,32,Spring调度,注册一个CronTriggerBean,每天早上六点执行。,006*?*,CronTriggerBean常见属性jobDetail指定调度任务为JobDetailBean的实例cronExpression指定重复执行的时间点,由七个数位表示。1.表示秒,2表示分,3表示小时(0-23),4表示日期(1-31),5.表示月份(1-12),6表示星期(1-71为星期天),7表示年(1970-2099),*表示任意,?表示不设置注:星期与日期不可同时指定,33,Spring调度,示例注册一个SchedulerFactoryBean实例,用于启动所有调度。,34,Spring单元测试建立在Junit测试的基础之上。AbstractDependencyInjectionSpringContextTests抽象类继承了Junit的TestCase,继承它的测试Spring将自动注入测试实例的属性。AbstractTransactionalDataSourceSpringContextTests用于在数据库测试时,在测试用例执行时需要验证数据库中的数据,在测试用例执行后需要恢复数据库数据的情形。,Spring单元测试,35,继承AbstractDependencyInjectionSpringContextTests的测试类需要重载getConfigLocations或getConfigPath方法用于提供Spring配置文件。,Spring单元测试,publicclassUserDaoTestsextendsAbstractDependencyInjectionSpringContextTestsOverrideprotectedStringgetConfigLocations()returnnewStringresource/applicationContext.xml;,36,Spring单元测试,publicclassUserDaoTestsextendsAbstractDependencyInjectionSpringContextTestsprivateUserDaouserDao=null;publicvoidsetUserDao(UserDaouserDao)privateJdbcTemplatejt=null;publicvoidsetJt(JdbcTemplatejt)protectedStringgetConfigLocations()publicvoidtestAddUser()Useruser=newUser();user.setNa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论