收藏 分享(赏)

spring 教程_3 应用.ppt

上传人:kpmy5893 文档编号:8710899 上传时间:2019-07-09 格式:PPT 页数:38 大小:477.50KB
下载 相关 举报
spring 教程_3 应用.ppt_第1页
第1页 / 共38页
spring 教程_3 应用.ppt_第2页
第2页 / 共38页
spring 教程_3 应用.ppt_第3页
第3页 / 共38页
spring 教程_3 应用.ppt_第4页
第4页 / 共38页
spring 教程_3 应用.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第 三 章,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 该包定义

2、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 C

3、ore,JDBCTemplate提供了对JDBC操作的封装 PreparedStatement(接口)用于建立PreparedStatement的回调接口 ResultSetExtractor(接口)用于将Result数据转换成Java的POJO的回调接口 RowCallbackHandler(接口)用于处理结果集的回调接口,例如删除记录集中的行或更新记录集中的行。 RowMapper(接口)用于将结果集中当前行映射到一个Java对象,7,Spring JDBC 示例,使用JDBCTemplate将查询结果转换成二维数组,List rows = (List)this.getJdbcTempla

4、te().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 /将结果集转换成二维数组

5、 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

6、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.prepa

7、reStatement(“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指定配置文件 mapp

8、ingResources指定映射文件,11,Spring 与Hibernate,HibernateTemplate用于提供对Hibernate操作的封装。,HibernateDaoSupport用于提供建立Hibernate DAO的父类。,12,Spring 与Hibernate,Spring提供了OpenSessionFilter用于解决Hibernate的延迟初始化问题,示例在Web.xml中配置OpenSessionFilter, openSessionFilterorg.springframework.orm.hibernate3.support.OpenSessionInViewF

9、ilteropenSessionFilter /* ,13,Spring 声明式事务,声明式事务与编程式的事务本质区别在于前节通过配置来声明事务。 Spring同时支持声明式事务与编程式事务。 Spring事务抽象接口PlatformTransactionManager 它实现了统一的事务获取,提交,回滚的方法。 TransactionStatus getTransaction(TransactionDefinition definition) 用于获取事务。 commit(TransactionStatus status) 用于提交事务 rollback(TransactionStatus

10、status) 用于回滚事务,14,Spring 声明式事务,Spring针对不同的事务实现提供了不同的事务抽象。 DataSourceTransactionManager提供了对JDBC事务的支持 HibernateTransactionMangager提供了对Hibernate事务的支持 JDOTransactionManager对使用JDO持久化的事务支持 JTATransactionManager使用JTA来管理事务,应用跨多个数据源时使用,15,Spring 事务抽象,事务抽象可作为一个bean在配置文件中声明,它实际上是针对于不同的ORM机制的事务代理对象。 配置JDBC事务抽象,

11、配置Hibernate事务抽象,16,Spring 编程事务,Spring提供了TransactionTemplate模板类,其使用具体的事务抽象封装了通用事务操作。 例配置TransactionTemplate并将其注入到业务类,17,Spring 编程事务,在代码中使用TransactionTemplate,this.getTrxTemplate().execute(new TransactionCallback() public Object doInTransaction(TransactionStatus ts) try /TODO:在事务中运行的脚本 catch(Exception

12、 e) ts.setRollbackOnly();/设置回滚 return null;/正常返回将提供交事务 );,18,Spring 声明式事务,Spring的声明式事务是建立在拦截通知之上的,通过配置事务策略决定在方法之前是否开始事务在方法执行之后是否提交事务。 TransactionProxyFactoryBean用于产生单个对象的事务代理对象,它默认织入了事务拦截。 TransactionInterceptor Spring提供的事务拦截通知。,19,Spring 声明式事务,TransactionInterceptor的属性 transactionManager提定拦截使用的事务抽象

13、 transactionAttributes提定拦截的事务策略,事务策略用于配置事务拦截开始,提交或回滚事务的策略,它由四部分组成: 传播行为 隔离级别 只读提示 事务超时,20,Spring 事务策略,传播行为,声明事务的边界,指定何时开始一个事务。 常见的取值如下:,21,Spring 事务策略,事务隔离级别,用于解决事务并发问题。 常见的取值如下:,22,Spring 声明式事务,只读提示,用于指定事务是否只能执行只读操作。 事务超时,提定事务的执行时间超时后将自动回滚。 示例配置事务拦截,PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Throwable

14、,23,Spring 声明式事务,事务拦截可被用于产生代理对象或使用自动代理织入到目标对象。 示例中展示了将事务拦截织入到名称以Srv结尾的目标对象中。,trxInterceptor*Srv,24,Spring 声明式事务,TransactionProxyFactoryBean用于产生单个对象的事务代理对象。,PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Throwable,25,Spring2.0 声明式事务,Spring2.0中引入了注解用于声明方法的事务 引入事务相关的xml配置元素,指定事务抽象,26,Spring2.0 声明式事务,在方法前添加Tra

15、nsaction注解用于指定方法的事务策略,Transactional public void addService() ,27,Spring 调度,调度是指按照一定的时间或规率重复执行一项任务。 Spring中的调度是建立在Quartz的基础之上。 Quartz支持频率调度及时间点调度两种方式。 SimpleTriggerBean用于指定按频率调度。 CronTriggerBean用于指定时间点调度,28,Spring 调度,Spring中建立调度的基本步骤: 建立调度的目标类,目标类是一个继承了QuartzJobBean的类 在Spring中注册调度任务,调度任务是一个JobDetailB

16、ean的实例,通过它的jobClass属性指定目标类,通过jobDataAsMap向目标类注入属性。 配置调度CronTriggerBean或SimpleTriggerBean指定其时间点或频率 启动调度,通过注册SchedulerFactoryBean来实现,它的triggers用于指定待启动的调度。,29,Spring 调度,示例中注册了一调度任务,/指定了目标类,每次调试都会建立一个新的实例/用于向目标类实例注入属性值key为属性名,30,Spring 调度,示例注册一个SimpleTriggerBean,每2秒钟执行一次。,/指定调度时间间隔此处为2秒/指定调度执行次数,不指定无穷次,

17、31,Spring 调度,示例注册一个SimpleTriggerBean,每2秒钟执行一次。,SimpleTriggerBean常见属性 jobDetail指定调度任务为JobDetailBean的实例 repeatInterval指定间隔时间 repeatCount指定次数,不指定无穷次 startDelay指定延迟多少毫秒启动调度,默认立即 startTime指定某个时间点启动调试,默认立即,32,Spring 调度,注册一个CronTriggerBean ,每天早上六点执行。,0 0 6 * * ? *,CronTriggerBean常见属性 jobDetail指定调度任务为JobDet

18、ailBean的实例 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,继

19、承它的测试Spring将自动注入测试实例的属性。 AbstractTransactionalDataSourceSpringContextTests用于在数据库测试时,在测试用例执行时需要验证数据库中的数据,在测试用例执行后需要恢复数据库数据的情形。,Spring单元测试,35,继承AbstractDependencyInjectionSpringContextTests的测试类需要重载getConfigLocations或getConfigPath方法用于提供Spring配置文件。,Spring单元测试,public class UserDaoTests extends AbstractDe

20、pendencyInjectionSpringContextTests 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

21、) private JdbcTemplate jt = null; public void setJt(JdbcTemplate jt) protected String getConfigLocations() public void testAddUser() User user = new User(); user.setName(“jerry“);user.setPwd(“123“); user.setType(“admin“);user.setUserid(“jerry“); /调用DAO userDao.addUser(user); /检查数据库中是否存在 assertEquals

22、(jt.queryForObject(“select name from users where userid = jerry“, String.class), “jerry“); ,37,AbstractTransactionalDataSourceSpringContextTests继承了AbstractTransactionalSpringContextTests,继承AbstractTransactionalSpringContextTests的测试在每一个测试用例开始时会开始一个事务,在测试用例执行后会自动回滚事务,测试用例因此不影响数据库的数据。 配置AbstractTransactionalDataSourceSpringContextTests必需要在Spring配置文件中配置一数据源。 配置AbstractTransactionalSpringContextTests必需要在spring配置中配置一个事务抽象。,Spring单元测试,38,总结,Spring中JDBC数据源的配置 JDBC模板类的使用 Spring与Hibernate的集成 Hibernate模板类的使用。 Spring的事务抽象 编程事务使用与声明式事务的配置 Quartz调度的配置 Spring的单元测试,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报