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

下载本文档

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

文档简介

第 三 章,Spring 应用,2,目标,撑握Spring JDBC辅助类 了解Spring DAO 撑握Spring与Hibernate的整合 撑握Spring声明式事务配置 了解Spring中定时调度的使用 撑握Spring的单元测试,3,Spring JDBC抽象框架提供了对JDBC操作的完整封装,包括: 指定数据库连接参数 打开数据库连接 声明SQL语句 预编译并执行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);,执行更新,新加或删除操作,this.getJdbcTemplate().update(“delete from stud where set = ?“, new ObjectF);,执行回调方法,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 声明式事务,声明式事务与编程式的事务本质区别在于前节通过配置来声明事务。 Spring同时支持声明式事务与编程式事务。 Spring事务抽象接口PlatformTransactionManager 它实现了统一的事务获取,提交,回滚的方法。 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并将其注入到业务类,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的声明式事务是建立在拦截通知之上的,通过配置事务策略决定在方法之前是否开始事务在方法执行之后是否提交事务。 TransactionProxyFactoryBean用于产生单个对象的事务代理对象,它默认织入了事务拦截。 TransactionInterceptor Spring提供的事务拦截通知。,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注解用于指定方法的事务策略,Transactional public void addService() ,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 ,每天早上六点执行。, 0 0 6 * * ? * ,CronTriggerBean常见属性 jobDetail指定调度任务为JobDetailBean的实例 cronExpression指定重复执行的时间点,由七个数位表示。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用于在数据库测试时,在测试用例执行时需要验证数据库中的数据,在测试用例执行后需要恢复数据库数据的情形。,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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论