Spring-Transaction_第1页
Spring-Transaction_第2页
Spring-Transaction_第3页
Spring-Transaction_第4页
Spring-Transaction_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

全文都是以学生课程管理这个例子来进行说明,简单明了:里面有studentDao,studentDaoImpl,courseDao,courseDaoImpl编程式实现Spring事务思路:编程式的实现事务,主要用到(1).TransactionTemplateOrg.springframework.transaction.support类,要在你的StudentDaoImpl中声明这个类的对象transactionTemplate,进行DI;(2)transactionTemplate.execute()方法进行数据库的事务操作(增,删,改);(3)配置beans.xml。1.在StudentDaoImpl类声明TransactionTemplateprivate TransactionTemplate transactionTemplate;/ 进行DI注入public void setTransactionTemplate(TransactionTemplate transactionTemplate)this.transactionTemplate = transactionTemplate;2.在该类中定义一个方法transactionTest(),实现事务管理。public void transactionTest(Student student)/ Have to make a final, according to the implemented methodfinal String id = student.getId();final String name = student.getName();transactionTemplate.execute(new TransactionCallback()Overridepublic Object doInTransaction(TransactionStatus ts)tryString sql = insert into student (id,name) values(?,?);/ Wrong sql/String sql = insert into studentssss (id,name) values(?,?);Object params = new Object id, name;jdbcTemplate.update(sql, params);catch (Exception e)ts.setRollbackOnly();System.out.println(Roll back at transaction .);return null;);方法详解:主要就是执行transactionTemplate.execute()方法,方法中用事务处理了增,删,改方法。其中:execure()有一个TransactionCallback接口,用匿名内部类进行实现,要实现接口中的方法doInTransaction(TransactionStatus ts). 在try-catch语句块中写入要进行的DB操作, jdbcTemplate.update(),如果出现异常,那么会在catch块中进行rollback.注意点:局部变量id, name必须声明成final类型,即不允许改动,这样才能在doInTransaction中利用局部变量(如果说的不对请联系我)。3.Beans.xml文件配置1.配置JdbcTemplate2.配置TransactionManagerTransactionManager配置根据使用的持久化技术的不同而不同,这里使用的是JDBC,所以对应的是DataSourceTransactionManager.各种持久化技术对应的TransactionManager对应表3.配置TransactionTemplate需要引用 transactionManager4.配置StudentDaoImpl完成!在main方法中直接调用studentDao. transactionTest(student)就可以了。声明式实现Spring事务思路:不需要像编程式的那样在源码中进行rollback,而是利用Spring AOP来实现。利用TransactionProxyFactoryBean来进行指定方法的拦截,设置TransactionAttribute,从而实现事务处理。这些都是在beans.xml文件中进行配置的,所以对源码并没有什么改变。假定,在courseDaoImpl中有方法 testTransaction( ) ,用来进行增、删、改等操作。方法1:1.实现TransactionProxyFactoryBeanOerceptorcom.primeton.spl.dao.CourseDao解释:id设置成courseDao:因为在main中通过ApplicationContext获得bean是通过这个名字获得的,这样显得直观。而真正的courseDao的实现类一般推荐在id后面加上”Target”(见下文)。(1).proxyInterfaces, 这里是指需要代理的接口有哪些。也就是需要被事务处理的方法在哪个接口中定义的。(2).target,代理的目标,也就是需要被事务处理的方法的实现类(3).transactionManager. 同上(4).transactionAttributeSource这个是事务处理的一些属性设置(见附录)2.配置MatchAlwaysTransactionAttributeSource默认事务属性为:PROPAGATION_REQUIRED ,ISOLATION_DEFAULT这个用来拦截所有在上文配置的接口中的所有方法,所以叫MatchAlways完成!在main方法中直接调用courseDao.testTransaction( )方法即可。方法2:1.实现TransactionProxyFactoryBeancom.primeton.spl.dao.CourseDao2.配置transactionAttributeSource这里引用了自定义的transactionAttribute3.配置自定义myTransactionAttributePROPAGATION_REQUIRES_NEW ISOLATION_REPEATABLE_READ这样做是可以进行自己定义事务处理的属性完成!在main方法中直接调用courseDao.testTransaction( )方法即可。方法3:1实现TransactionProxyFactoryBeancom.primeton.spl.dao.CourseDao2.配置NameMatchTransactionAttributeSourcePROPAGATION_REQUIRES_NEW ,ISOLATION_REPEATABLE_READ ,readOnly, -SQLException, +ExceptionNameMatchTransactionAttributeSource 这样可以指定方法名字,自定义事务属性。* 是通配符,你也可以在这里直接写上”testTransaction”注意-SQLException, +Exception,如果某个异常前面有负号(-),那么当发生异常时进行rollback;如果某个异常前面有正号(+),抛出异常还是会commit完成!在main方法中直接调用courseDao.testTransaction( )方法即可。方法4:1实现TransactionProxyFactoryBeancom.primeton.spl.da

温馨提示

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

评论

0/150

提交评论