传智播客-spring2.5视频配套PPT黎活明(精)_第1页
传智播客-spring2.5视频配套PPT黎活明(精)_第2页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、北京传智播客教|7 www.itcaGC传智播客 一级软件人才实作培训专审、Spring是什么Spring是一个开源的控制反转(Inversion ofControl ,IoC)和面向切面(AOP)的容器框架它 的主要目得是简化企业开发.北京传智播客教|7 www.itcaGV_丿vZZ)北京传智播客教17 IOC 控制反转public class Pers on ServiceBean private PersonDao personDao = new PersonDaoBean();public void save(Person person)personDao.save(person);

2、PersonDaoBean是应用内部创住及细护的。所谓控制反转就是应用本身 不负责依赖对象的创建及维护,依赖对彖的创建及维护足由外部容器负责的。 这样挖制权就山丿卫用转移到了外部容器,控制权的转移就是所谓反转。北京传智播客教17 C传智播客一高级软件人才实作培训专审、依赖注入(Dependency Injection)比我们把依赖对彖交给外部容器负责创建,那么PersonServiceBean类可以 改成如下:public class PersonServiceBean private PersonDao personDao;通过构造器够数.讣容器把创建好的依赖对彖注入PersonServic

3、eBean.F 然也对以使用setter方法进fr注A public PersonServiceBean(PersonDao personDao)this.personDao=personDao;public void save(Person person)personDao.save(person);所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对彖注入到组件C传智播客一髙级软件人才实作培训专审、 | Service | DAO 可以使用容器提供的众多服务,如:事务管理服笊消息服务等等。当我们使用 容器管理事务时,丿I:发人员就不再碍要手工控制事务.也不需处理复杂的事务传播。容器提供单

4、例模式支持,开发人员不再盅要自己编写实现代码。容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。容器提供的众多辅作类,使川这吐类能够加快应用的开发,如:JdbcTemplate.HibernateTemplate。Spring于主流的丿“丿IJ框架提供集成支持,如:集成Hibernate. JPA、Struts这样更便于应用的丿I:发。北京传智播客教仃北京:传种播客教仃如果使用Spring,我们就不再需耍手工控制事务Hibernate的川务操作:public void save()Session session = sess ion Factory getCurrentSes

5、sion(); session.beginTransactkn);Info info = now Infcf仏NM V) info setContentfl r内实力蛾就的java培- I HLI-T);session.save(info);ses$ion.getTransaction().commitO:JDBC的M务操作:Connection conn = null;tryStatement stmt = conn createStatement(); stmt executeUpdateCupdate person where name=n|人);mitO;X.conn.rollback

6、O; finallyonn.closeO;北京传和播客教|7 另外,如果便用spring,我们也不需耍处理复杂的事务传播行为public void payment()Bean1.update();Bean2.save();如果我们不使用Spring.针对卜而这两种业务而求.我们该如何做?弟种可能的业务需求,耍求Bean1.update()和Bean2.save()A个农务中执行。第2种叮能的业务需求:决求不itBean1.update()的W务足否成功,都荷也记录操作II志public class Beard public void update() 7i:v:卜M冇略川:代i:Conn ec

7、tion conn = null;conn.setAutoCommit(false);Statement.executeUpdate(Mupdate account set amount=? where id=?M):public class Bean2 public void save()卜IIWConnection conn null;conn.setAutoCommit(false);Statement executeUpdatefinsert into Log (content) values (?);厂传离级软件人才实作培讪I专宴厂传离级软件人才实作培讪I专宴北京传和播客教|7 使川

8、Spring,不再需要我们处理复杂的事务传播行为使用Spring.我们只需要通过声明式的M务属性配朮就町以轻松地实现这两种业务需求1要求Bean 1 .update()4lBean2.save()的右:hJ个啡务屮执fj:2要求不Bean1.update()的啡务足否成功,都石要记录I I志.Tra nsactional(propagationPropagation. Required) public void paymcnt()Bean1.update();Bea n2.save():public class Beard Transactional(propagatio n二Propagat

9、ion. Required)public void update() executeUpdate(Mupdate account set amount=? where id=?wKpublic class Bxn2 Tra nsac(ional(propagalio n=Propagation.RequiresNew)轻量级与重量级概念的划分经常会有同学问到spring属于轻量级框架,还是重量框架P其实划分一个应用是否属于 轻皐级还是重量级注要看它使用了多少服务使用的服务越多,容器要为普通java对 象做的工作就越多,必然会影响到应用的发布时间或者是运行性能.对J spring容器.它捉供了很

10、参服务.但这些服务并不是默认为W用打开的.应用碍耍某种服务.还需耍指明 使用该服务.如果应用使用的服务很少如:只使用了spring核心服务.那么我们町以认为此时应用屈F轻 秋级的.如果应用使用了spring捉供的人部分股务.这时应用就加尸帀、秋级。H请EJB容器就因为它狀认/ 为应用提供了EJB规范中所有的功能.所以它属于匝貳级。丿c传智北京:传种播客教北京:传种播客教仃c传智播客一髙级软件人才实作培训专家使用Spring需要的jar到/download下载spring,然后进行解压缩, 在解压 目录中找到下面jar文件,拷贝到类路径下dis

11、tspring.jarlibjakarta-commonscommons-logging.jar如果使用了切面编程(AOP),还需要下列jar文件lib/aspectj/aspectjweaver.jarifUaspectjrt.jarlib/cglib/cglib-nodep-2 1 _3 jar如果使用了JSR 25O中的注l?,ftnResource/PostConstruct/PreDestroy,还需 要下列jar文件libj2eecommon-annotations.jar北京传智播客教|7 C传智播客一髙级软件人才实作培训专家spring的配置文件模版牴關麗翳礬笃翳萄常声説嘲1塞

12、豔%文件的取名可以任意文件聊北空传智播客教仃编写spring配置文件时,不能出现帮助信息山于spring的schema文件位于网络I:,如果机益不能连接到网络,那么在编 勇配锐信息时候就无法出现提示信息,解决方法有两种:1。让机器上网,eclipse会自动从网络上卜载schema文件并缓存在硬盘上。2o于动添加schema文件,方法如 2windwos-preferencesmyeclipsefiles and editors-xml-xmlcatalog点add,在出现的窗口中的Key Type中选择URI,在location中选”File system11,然眉在spring解压FI录的d

13、ist/resources口录屮选择spring-beans-2.5.xsdjw|到设宣窗口的时候不要急着关闭窗口丿卫把窗中的Key Type改为Schemalocation,Key改为/schema/beans/spring- beans-25.xsd北京传智播客教I? 实例化Spring容器常用的两种方式:方法一:在类路径卜寻找配買文件来实例化容器Applicationcontext ctx = new ClassPathXmlApplicationConlext(new StringMbeans.xml);方法二:在文件系统路径卜

14、寻找配誉文件来实例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new StringnC4d:beans.xmlu);Spring的配置文件可以指定多个.可以通过Siring数组传入。厂传智播客实例化spring器北京传智播客教I? 从spring容器中得到bean当spring容器启动后,因为spring容器町以管理bean对彖的创建,销毁 等牛命周期,所以我们只需从容器直接获取Bean对彖就行,而不用编 写-句代码來创建bean对彖。从容器获取bean对彖的代码如下:Applicationcontext ct

15、x = new ClassPathXmlApplicationContextfbeans.xmr); OrderService service =(OrderService)ctx.getBean(MpersonServiceM);V_丿北空传智播客教仃使用dom4j读取spring配置文件ublic class ItcastClassPathXmlApplicatio“Context private List bean Defines = new ArrayList(); public ItcastApplicationContext(String filename)init(file na

16、me);private void init(String filename)SAXReader saxReader = new SAXReader();Docume nt docume ull;tryURL xmlpath - this.getClass().getClassLoader().getResource(filename); document saxReader.read(xmlpath);Map nsMap = new HashMap():nsMap.put(Mns*,Mhttp7//schema/beansM)y/Ul入命名空何XP

17、ath xsub - document.createXPath(/ns:beans/ns:bean)y/创ikbeans/bean仕询略彳命xsub.selNamespacellRls(nsMap)y/设胃命名空何List beans = xsub.selectNodes(document)文档卜所仃bean卩点for(Element element: beans)String id - element.attributeValue(kiw);/R取id属性他厂传厂传北空传智播客教仃String clazz = element.attributeValue(*class*); /获収class

18、加竹们BeanDefinition bean Define = new BeanDefinition(id. clazz): beanDefines.add(beanDefine);)catch(Exception e) e.printStackTrace();北京传智播客教I? lobalC传智播客 一JT级软件人才实作培训专审、三种实例化bean的方式1使用类构造器实例化2使用挣态工厂方法实例化 ublic class OrderFactorypublic static OrderServiceBean createOrder()return new OrderServiceBean();

19、I3使用实例1:厂方法实例化: oublic class OrderFactory public OrderServiceBean createOrder()return new OrderServiceBean();北京传智播客教仃C传智据客一高级软件人才实作培训专宴、Bean的作用域.singleto n在毎个Spring loC容器中一个bean定义只有一个对彖实例。 默认悄况卜会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=1rue來延迟初始化bean,这时候,只有第一次获取bean才初 妗”匕beam.如:如果想对所仃bean祁J用延迟初始化町以4根廿心

20、、beans设?7defaultlazyinithtrue“如卜:.prototype何次从容器获取bean都是新的对線。.request.session北空传智播客教仃C传智播客 一JT级软件人才实作培训专家指定Bean的初始化方法和销毁方法指定Bean的初始化方法和销毁方法北京传智播客教仃厂传北京传智播客教I? 注入依赖对象基本类型对象注入:bean id=”orderService classicn.itcast.service.OrderServiceBean、|勾辽器J入/W setter7j;1;;入注入其他beam方式一方式二(使用内部bean,但该bean不能被其他bean使用

21、)bean id=orderService” classicn.itcast.service.OrderServiceBearT北空传智播客教仃集合类型的装配public class OrderServiceBean private Set sets = new HashSet();private List lists = new ArrayList(); privateProperties properties = new Properties();private Map maps = new HashMap();/这里省略属性的getter和setter方法北京传智播客教|7 集合类型的装

22、配bean id=Morder class=Mcntcast.service.OrderServiceBeanllhuomlng set property namWmaps、property namexpropertiesSsss厂传厂传北京传智播客教I? C传智播客 一7T级软件人才实作培训专家依赖注入使用构造器注入使用属性sette r方法注入使用Field注入(用丁注解方式)注入依赖对象可以采用手匸装配或白动装配,在实际应用 屮建议使用手工装配,因为自动装配会产生未知情况,开发 人员无法预见最终的装配结果。C传智播客一髙级软件人才实作培训专家依赖注入手工装配手工装配依赖对象,在这种方式中

23、又有两种编程方式1在xml配置文件中.通过在bean节点下配賈.如; 入心:setter, 入2. Zljava代码中使JIJAutowiredResource注解方戌进行製配但我们需耍在xml配汽文件中配咒以下信息:beansxmlns-Mhttpi//schema/beansxmlns:xsi=Mhttp:/www. /2001/XMLSchema-instancexmlns:context二/sch8ma/cont8xtxsi:schemaLocation=http:/w

24、/schema/beans /schema/beans/spring-beans2.5.xsd /schema/contexthttp:/www.spri ngframeworkorg/schema/context/springcontext25xsd、这个配北隐式注册上个对注释进行解析处理的处理器:AutowiredAnnotationBeanPostProcessor.CommonAnnotationBeanPostProcesso

25、r. PersistenceAnnotationBeanPostProcessor.RequiredA nn otatio nBeanPoslProcessoril:Resource注解4 spring安装11(ljlibj2eecommon-annotations.jar1手工装配依赖对象 自动装配依赖对象北京传智播客教|7北京传智播客教I? C传智播客一高级软件人才实作培训专宴、依赖注入手工轅配在java代码中使用Autowired或只6$01126注解方式进行装配.这两个注解的区别是:Autowired默认按类型装配,(Resource默认按名称装配,当找不到与名称匹配的bean才会按类

26、 型装配。 Autowiredprivate Person Dao person D aoy/lfl IO IAutowiredpublic void setOrderDao(OrderDao orderDao) 1 J Yjsetter/j,A ithis.orderDao = orderDao;Autowired;l按类住装M依赖対彖.狀认悄况卜它农求依極対农必须丫M如果允finullfft可以设闻它required风性为false.如果我们想使用按名称裳配,可以结合Qualifie於解超使用。如下*Autowired Qualifier(personDaoBean,v)private P

27、erson Dao pers on Dao;Resource沖解和Autowired样.也町以你注4F 段戒属竹的setter方仏上们它狀认按名称装配。名称町以通过Resource的nameM性描足.如來没卞上葩杯注任7段I即默认収7段的名称作为bean名称J找依赖对線.临卜僻标注在属性的setterZ/xA1:即默认収忸性名作为bean称J找依较対沒“Resource(name=personDaoBeanprivate PersonDao personDaoy/ I J;2乜韜髅蠶潜器勰盅聽寵认韻鶴霧翼彗对如鉀ce注解会北京传智播客教|7 C传智播客一高级软件人才实作培训专审、依赖注入-自疝

28、装配依赖对象对于自动装配,大家了解一下就可以了,实在不推荐大家使用。例了:autowire属性取值如F:byType:按类羽装配,町以根据屈性的类羽,在容器中寻找跟该类粮匹配的bean。如 果发现多个,那么将会抛出异常。如果没冇找到,即属性值为null。酬霍賤儡臨酬營时嘶称在容器中寻找跟该屈性同的constructor与byType的方式类似,不同Z处在:它应川J:构适器参数。如杲在容器屮 没有找到与构造器参数类些一致的bean-那么将会抛出异常。autodetect:通过bean类的门省机制(introspection)来决泄兄使JfJconstructor还是byType方式进行门动装配。

29、如杲发现狀认的构适器,那么将便川byType方式。北京传智播客教I? C传智播客一高级软件人才实作培训专家、通过在classpath自动扫描方式把组件纳入spring容器中管理询面的例子我们都融使用XML的bean定义來配賈组件。在一个稍大的项目中,通常会有上百个纽件, 如果这吐这组件JlJxmlfrjbean定义來配朮 显然会増加配R文仔的体枳,任找及维护起來也不太方 便。spring2.5为我们引入了组件白动扫描机制.他可以在类路径虑卜寻找标ftTComponent. Service、(Controller. (Repository注解和类,把这吃类纳入进spring容惡中管理。它的作用

30、和在xml文件中他IJbeanM点配玄组件定样的“要便用门动打描机制,我们需咚打开以卜配曲倍息 vcontext:component-scan basepackage=”cnlcasl”/return method.invoke(tliis.targetObject. ar莒3);/三方法活用姿、今H咏对象当目标类实现了接口,我们可以僅用jcikProxy未生成代理对象。Aspect(切面):指横切性关注点的推象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征 的抽廉,而切面横切性关注点的抽象.joinpoint(连接点):所谓连接点是指那煦被拦截到的点。在spring中,这些点指

31、的是方法,因为spring只 支持方法类型的连接点,实际joinpoint还可以是field或类构造器)Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义.AdviceGfi知):所谓通知是指拦截到joinpoint之后所要做的寧悄就是通知通知分为前置通知,后置通知, 片常通知,垠终通知,环绕通知Target(目标对食):代理的目标对象Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程称为织入.troduction(引入):在不修改类代码的前提下,Introduction可以在运行期为类动态地添加一些方法或/Field

32、.7public class JDICProxy implements liivocafioiiHaiidler private Object targetobject./4:理的H呼对累public Object createProxyInstance(Object target Ob jcctHthis.targctObject = targetobject;厂第一个拿数i殳賣代码使用的类竣载器,一般采用跟目吟类相同的类锻就器*第二个代理类实现的接口四第三个參故i殳賣回调对象当代理对象的方法被调用时,会委派给该参玫扌U定对象的invoke方法 /return Proxy.nwProxyIn

33、staiice(thistar呂etObjectMtCgssO getClassLoadfOthis.targetobject.getClass0.getlnterfaces0. this);%北京传智播客教I? 其中base-package为需耍M描的包(含/包)“ Service用J标注业务层组件、Controller用标注控制层组件(如struts中的action)、 RepositorylH J标注数据访问组件.即DAO组件。而(Component泛指组件.当组件不好归类的 丸我们可以便川这个注解进行标注.北京传智播客教|7 JDK动态代理public Object iiivoke(O

34、bject proxy, Methcxl method, Object| args)throws Tlirowable 厂传北京传智播客教仃使用CGLIB生成代理public class CGLIBProxj* implements Method1111erceptor private Object targetobject/代理的H咏对象public Object createProxyInstance(Object target Object)!this.targetobject = targetobject;Enhancer enhancer = lieu* EiihaiicerO;/该

35、类用宅成代心对*eiiliAiicer.setSuperclass(this.targetObject.getClassO);/i2tt, t enhancer. setCaUback(Ui闾;/ /设fit回训用对象为公号return enhancer.createO;public Object intercept(Object proxy. Method methcxlObject args,Method Proxy raethodProxy) throws Tlirowable return mcthodPro?cy.involce(this.targetobject, args);CG

36、LIB可以生成目标类的子类,并車写父类非finals饰符的方法。北京传智播客教仃.AOP 中的概念丿北京传智播客教|7 C传智播客一离级软件人才实作培训专事使用Spring进行面向切面(AOP)编程妥进行AOP编程,首先我们要在spring的配置文件中引入aop命名空间: Spring提供了两种切面声明方式,实际工作中我们可以选用其中一种:基于XML配置方式声明切面。基于注解方式声明切面。C传智播客一离级软件人才实作培训专事戟先启动XjAspectJ注解的支持(蓝色部分): 北京传智播客教仃基于注解方式声明切面丿北京传智播客教仃C传智播客 一髙级软件人才实作培训专审 基于注解方式希明切面Asp

37、ectpublic class LogPriiit Pointcut( execution(* cn.itcast.service. .*.*(.) )private void anyMethodO /声明 个叨入点BcrJic( MiiyMcrdiiMlO & rti&(ueiNrtiuc)/= 活忙public void doAccessChcck(Striiig userName) AfterRetuniing(poiiitcut- anyMethodO.returning- revalue )/定Z听賣通丸public void cloReUimCheclc(Strin

38、g revalue) AfterThroudng(poiiitcut= anyMethodO, throwin歹ex )/定义例外H知public void doExceptioiiActioxi(Exception ex) After( anyMethodO )/定义最终通知public void doReleaseActionO AroundC anyMethocl0)/环络通勺.:public Object cloBasicProfilingjProcccclingJoinPoiiit pjp) throws Throwablc flit北京传智播客教|7 基于基于 XML 配置方式声明

39、切面public class LogPrint public void doAccessCheck() 定义前置通知public void doRetumCheck()定义后置通知public void doExceptionAction()定义例外通知public void doReleaseActionf)定义最终通知public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable return ceed();环绕通知厂传丿北京传智播客教|7 C传智播客 一TT级软件人才实作培训专事 基于基于 X

40、ML配置方式声明切面:bean id= or*Hop.poiAilcul id* luycut cxpicaaiwncxcvuliwn(- un.ilcwal.acivice. V_丿北京传智播客教I? Spriiig+JDBC组合开发使用Spring+JDBC集成步骤如下:配置数据源,如:bcan id=,rsql:/localhost:3306/itcast?uscUnicodc=truc8iamp;charactcrEncovproperty iiRme=useniame value= root 7略配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名 空间(见下页),

41、事务的配胃方式有两和-注解方式和呈于XML配視方式。厂传髙级软件人才实作培讪I专宴丿北京传智播客教|7 在spring配置文件中引入用于声明事务的tx命名空间配置数据源 property name=niaNl!-最小空闲值.当空闲的遙接牧少于阀值时,连接池默会讯申清去一导连接,以免洪嶂来时来不及申请北京传智播客教丿北京传智播客教|7 用vcontextproperty-placeholder location=perties*屈性占位符c传智播客北京传智播客教|7 使用属性占位符方式配置数据源 wpci ly 11M1UC UCl ilUUC VrtlucU2C1 llruuc

42、/-*!-然小空闲值当空闲的逹接教少于阀值时,连接池就会稅申谴去一些连按.以免洪埠来时来不及申请V_丿北京传智播客教|7 采用注解方式配置事务采用注解方式bean id=txManager” class=*org.springframework.jdbc datasource.DataSourceTransactionManagertx:a nnotatio ndriven transactionmanagerJtxManager”/Service Transactionalpublic class PersonServiceBean implements PersonService c传智C

43、传智播客一髙级软件人才实作培训专审.北京传智播客教仃采用基于XML方式配置事务pviiilcul idUMiisidcUuAiPviiiluul* cxpicsaiouexcuuliuii * i ii.itivii/-*tx:advice id- txAdvicentransaction manager JfxMana呂V_丿北京传智播客教仃彳史用JdbcTemplate进彳门nsert/update/delete操作Service Transactionalpublic class PersonServiceBean implements PersonService private Jdb

44、cTemplate jdbcTemplate;(Resourcepublic void setDataSource(DataSource dataSource) this.jdbcTemplate = new JdbcTemplate(dataSource);/添加public void save(Person person) throws ExceptionjdbcTemplate.update(Hinsert into person (name) values(?)*,new Object1person.getName()G new int java.sql.Types.VARCHAR);

45、厂传C传智播客一髙级软件人才实作培训专审.北京传智播客教仃IL_IZ_ Jc传智播客北京传智播客教|7 使用JdbcTemplate获取一条记录Sendee Transactionalpublic class PersonServdceBeaii implements PersonService private JdbcTemplate jdbcTemplate;Resourcepublic voidC(DHIH3JUIL:C(DKIW3CJUIvcUKIHSUUICC) this.jdbcTemplate = new JdbcTemplate(dataSource);public Perso

46、n getPerson(Integer idHRowMapper rowMapper = new RowNfapperO)public Object mapRow(ResultSet rs, int rowNum) throws SQLExccption Person person =new PcrsonO;person.setlcl(rs.getlnt( id );person.setName(rs.getStriiig( name );return person;;retuni (Person)jrForObiect( select * from person where id=Znew

47、ObjectlKid, new int(Hjava.sql.Types.INTEGER, rowMapper);北京传智播客教|7 使用JdbcTemplate获取多条记录Sendee Transactionalpublic class PersonServdceBeaii implements PersonService private JdbcTemplate jdbcTemplate;Resourcepublic void sctDataSourcc(DataSource dataSource) this.jdbcTemplate = new JdbcTemplate(dataSourc

48、e);public List getPersonsOJRowMapper rowMapper = new RowNfapperO)public Object mapRow(ResultSet rs, int rowNum) throws SQLExccption Person person = newPcrsonO;person.setlcl(rs.getlnt( id );person.setName(rs.getStriiig( name );return person;return jdbcTempbte. query (select * from person , rowMapper)

49、;c传智c传智播客北京传智播客教|7 事务传播属性REQUIRED:业务方法需要在一个事务中运行。如果方法运行时,已经处在一个事务中,那么加入到 该卒务,否则为自己创建一个新的事务。NONSUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。 如果方法在一个專务中被调用,该班务会被拄起,在方法调用结束后,原先的事务便会恢复执行。REQUIRESNEW: M性表明不俗是否存在卒务,业务方法总会为白己发起一个新的卒务。如果方法己 经运行在一个事务中,则原有卒务会被挂起,新的卒务会被创建,宜到方法执行结束,新事务才算 结束,原先的班务才会恢复执行。MANDATOR

50、Y:性指定业务方法只能在一个已经存在的挙錚中执行,业务方法不能发起白己的事务。如果业务方法在没有事务的环境下调用,容器就会抛出例外。SUPPORTS:这一事务属性表明,如果业务方法在某个事务范国内被调用,则方法成为I亥事务的一部 分。如果业务方法在寧务范围外被调用,则方法在没有事务的环境下执行。Never:指定业务方法绝对不能在事务范围内执行。如果业务方法在某个事务中执行,容豁会宛出例外, 只科业务方法没科关联到任何卒务,才能正常执行。NESTED:如果一个活动的事务存衽,則运行在一个嵌套的事务中如果没有活动事务,则按REQUIRED風性执行它便用了一个单独的卒务,这个卒务拥科多个可以回滚的保

51、存点。内部卒 务的回滚不会对外部班务造成影晌。它只对DataSourceTransactionManagcr务竹理器起效北京传和播客教|7 Connection conn = null;tryconn.setAutoCommit(false);Statement stmt conn.createStatementf);stmt.executeUpdate(Mupdate person set name=*888,where id=r);Savepoint savepoint = conn.setSavepolnt();lryconncreateSgtement()executeUpdate(upd3te person set name-*222* where sid-2); calch(Exception ex)conn.rollback(savepolnt);stmt.executeUpdate(*delete from person where id-9H);con milO;厂传c传智播客北京传智播客教|7 stmt.close(); catch (Exception e

温馨提示

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

评论

0/150

提交评论