




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、黑马程序员:三大框架Spring-day11笔记Spring事务管理机制Spring事务管理的四个优点:1. 提供一致的对于不同的事务管理的API2. 支持声明式事务管理(重点)3. 编程事务管理(在开发中应用比较少)4. 优秀的整合与Spring的数据访问我们重点讲解spring的事务管理的相关的API,还有声明式事务管理Spring事务管理主要提供了三个接口来完成1. org.springframework.transaction.PlatformTransactionManager这是一个事务管理器,可以来选择相关的平台(jdbc hibernate jpa)2. Transaction
2、Definition它定义事务的一些相关信息 例如 隔离 传播 超时 只读3. TransactionStatus它主要描述事务具体的运行状态1.1.1 PlatformTransactionManager平台事务管理器在不同的持久化层解决技术它的事务代码不一样。JDBC开发Connection con=;con.setAutoCommit(false);/开启事务con.rollback();mit();Hibernate开发Session session=.;Transaction t=session.beginTransaction();mit();t.rollb
3、ack();PlatformTransactionManager接口APIDataSourceTransactionManager 主要针对于JdbcTemplate开发 MyBatis开发HibernateTransactionManasger主要针对于Hibernate开发JpaTransactionManager 主要针对于JPA开发。1.1.2 TransactionDefinition它描述的是事务的定义信息。在TransactionDefinition中定义了大量的常量 隔离以下是关于隔离性相关信息事务的四个特性 ACID 原子性 一致性 隔离性 持久性。不考虑事务隔
4、离性有什么问题?脏读,不可重复读 虚读。ISOLATION_DEFUALT 它使用后端数据库的默认隔离级别(spring中选项)ISOLATION_READ_UNCOMMITTED 不能解决问题,会发生脏读 不可重复读 虚读ISOLATION_READ_COMMITTED 可以解决脏读 会产生不可重复读与虚读。ISOLATION_REPEATABLE_READ 可以解决脏读,不可重复读 解决不了虚读ISOLATION_SERIALIZABLE 串行化,可以解决所有问题对于不现的数据库,它的底层默认事务隔离级别不一样。Oracle数据库它默认的是read_committedMysql数据库它默认
5、的是repeatable_read. 超时默认值是-1 它使用的是数据库默认的超时时间。 只读它的值有两个true/false,如果选择true一般是在select操作时 传播它解决的是两个被事务管理的方法互相调用问题。它与数据库没关系,是程序内部维护的问题。以下定义了事务的传播行为以上操作中最常用的三种:PROPAGATION_REQUIRED 默认值 两个操作处于同一个事务,如果之前没有事务,新建一个事务PROPAGATION_REQUIRES_NEW两个操作处于不同的事务PROPAGATION_NESTED它是一种嵌套事务,它是使用SavePoi
6、nt来实现的。事务回滚时可以回滚到指定的savepoint,注意:它只对DataSourceTransactionManager有作用以下了解PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常PROPAGATION_NOT_SUPPORTED 以非事务运行,如果有事务存在,挂起当前事务PROPAGATION_NEVER 以非事务运行,如果有事务存在,抛出异常1.1.3 TransactionStatus它定义了事务状态信息,在事务运行过程中,得到某个时间点的状态1.2 声明式事务管理1.
7、2.1 事务管理方式1. 编码方案 不建议使用,它具有侵入性。在原有的业务代码基础上去添加事务管理代码2. 声明式事务控制,基于AOP对目标进行代理,添加around环绕通知。这种方案,它不具有侵入性,不需要修改原来的业务代码1.2.2 基于xml配置声明式事务管理方案第一步:在applicationContext.xml文件中添加aop与tx的名称空间第二步:在applicationContext.xml文件中配置Spring提供的advice是传统的spring advice1. 声明事务管理器2. 配置通知Spring为我们提供了一个TransactionInterceptor来完成增强
8、对于这个增强,我们可以使用spring为我们提供的一个标签来完成操作3. 配置切面 因为使用的是传统的spring的advice,需要使用1.2.3 基于annotation声明式事务管理方案可以使用Transaction来在类或方法上添加声明式事务管理注意:需要在applicationContext.xml文件中使用相当于开启注解事务控制问题:关于xml方式与annotation方式的优缺点?从简单上来说,使用注解更方便。使用配置的方案,可以对事务配置进行集中维护。第2章 SSH框架整合SSh=struts2+spring+hibernate struts2 2.3.24spring 4.2
9、.4hibernate 关于xml配置文件的整合方式2.1.1 SSH整合jar包 Struts2框架需要jar包Asm 是关于字节码操作Commons-fileupload 关于文件上传Commons-io 关于io流操作工具Commons-lang 也是一个工具,包含了关于数据与字符串操作Freemaker 标签库模板文件Javassist 它也是关于字节码操作,动态代理可以使用它实现(类似于cglib)Log4j关于日志Ognl 关于ognl表达式Struts2-core xwork-cor struts2框架底层是使用xworkStruts2与sprin
10、g整合还需要这个包如果需要使用struts2提供的json处理注意:如果使用注解方案,我们还需要导入一个jar包 Hibernate框架需要的jar包Antlr 语法解析包Dom4j 解析xmlGeronimo-jta apache geronimo它是一个开源javaEE服务器 Geronimo-jta是这个开源项目提供jar包,在hibernate中是关于jta事务相关Hibernate-commoins-annotations这个包是我们在hibernate下来使用jpa相关的注解,这样它不依赖于hibernateHibernate-core 开发hibernate必须Hi
11、bernate-jpa 它是关于hibernate对jpa的支持Jandex 用于索引annotationJavassist 关于字节码操作(注意:strtus2中也引入这个jar包了)Jboss-logging 它是关于jboss统一日志处理如果使用关于jpa相关操作需要导入jpa依赖jar包C3p0连接池还需要数据库相关的驱动jar包还需要静态日志处理 Spring框架需要的jar包Spring最基本jar包AOP开发 Spring jdbcSpring 事务管理需要txSpring整合hibernate Spring整合web开发如果使用到junit测试还需要commons
12、-loggin jar包2.1.2 创建工程完成整合前期准备需要的配置文件:Strtsu2框架 src/strtus.xmlHibernate框架 src/hibernate.cfg.xml 在domain有 Xxx.hbm.xmlSpring框架 src/applicationContext.xml关于日志 perties关于数据库连接 perties2.1.3 Spring整合hibernate基本原理:就是由spring来管理hibernate的SessionFactory 方式一:零障碍整合(了解)我们只需要使用spring中提供的一个Loc
13、alSessionFacotry来加载Hibernate的配置文件。Ssh-xml工程加载到服务器后,如果可以自动创建表,就代表spring整合hibernate ok.注意:我们必须配置spring的ContextLoaderListener 方式二(spring管理hibernate配置)不在需要hibernate.cfg.xml文件,所有关于hibernate.cfg.xml文件中的配置都在spring的配置文件中来配置。首先要配置数据源接下来引入properties文件创建LocalSessionFactoryBean来完成spring管理hibernate中的Sessi
14、onFactory上述的props可以简化成下面方案加载hbm.xml配置文件mappingResources它类似于我们之前mappingLocations它加载时是根据类路径加载 classpath:路径mappingJarLocations它会加载jar文件中的hbm.xml文件mappingDirectoryLocations 它加载的目录 spring整合hibernate后的DAOspring整合hiberante后,我们的dao只需要继承HibernateDaoSupport类在HibernateDaoSupport中只需要注入SessionFactory就可以获得
15、到HibernateTemplate,它是对hibernate操作的一个简单封装,可以让我们方便使用原来hibernate的操作. 编写service及测试测试事务管理 HibernateTemplate API介绍保存操作 session.save()修改操作 session.update()删除操作 session.delete()类似于session.saveOrUpdate()根据持久化对象的状态来判断执行save或update获取操作 get() load()Find操作 类似于session.createQuery().setParameter().li
16、st()类似于hibernate中的QBC查询,完全的面向对象方案下面这个可以执行命名查询可以在User.hbm.xml文件中定义hql或sql2.1.4 Spring整合struts2框架 前期准备创建一个addUser.jsp页面创建UserAction类Struts.xml文件中配置 Spring整合struts2原理分析1. spring整合struts2框架必须导入一个jar包struts2-spring-plugin.jar2. struts2框架配置文件加载顺序a. pertiesb. struts-default.xmlc. s
17、trtus-plugin.xml3. 在struts2框架中所有的action interceptor result全是bean,在struts2框架中默认是使用strtus2自己bean初化操作.4. 当我们在工程中导入struts2-spring-plugin.jar文件就会加载这个包下的strtus-plugin.xml这时bean的创建由spring来管理。5. 这时在创建Action时它执行的代码上述代码,在执行时,首先会从spring容器中来获取,如果获取不到,会buildBean通过上述分析,spring整合struts2框架它的方式有两种1. spring管理action(简单
18、说就是在applicationContext.xml文件中来声明action)2. action自动装配service spring整合struts2框架方式一(掌握)这种方案是基于spring管理action1. 在applicationContext.xml文件中配置2. 在action类中3. 在struts.xml文件Class的值就是bean的id值注意:必须在web.xml文件中配置struts2框架的Filter Spring整合struts2框架方式二(action中自动注入service)Struts.xml文件中Class还是类的全名这时就会将a
19、ction类中需要的注入servcie自动注入在perties中有一段配置这时就会根据名称进行autoWires我们可以修改注入的方式我们在struts.xml文件中修改了注入的方式,根据type进行注入 Spring整合struts2框架总结1. 如果在struts.xml文件中如果写的是全类名,我们使用action自动装配service方案2. 如果在struts.xml文件中这时,在applicationContext.xml文件中要配置3. 以上操作的前提是必须导入struts2-spring-plugin.xml文件在这个文件中它改变struts2
20、的bean工厂4. 默认情况下如果采用action自动装配service方案,这时每一次请求都会新创建一个action,并且service的装配类型是by name5. 如果我们采用的是spring管理action这种方案我们必须在声明中添加scope=prototype”,原因是struts2框架的action每一次请求都应该是一个新的action2.2 关于annotation整合方式2.2.1 Jar包导入在原来的xml基础上在多导入一个jar包只有导入这个jar包后,我们才能使用struts2框架的注解 Namespace Action2.2.2 配置文件Web.xml文件中要配置 S
21、pring的配置文件 applicationContext.xmlStruts2的配置文件 struts.xml2.2.3 使用JPA注解来定义PO类Entity 定义实体类Table 定义表Id 主键GeneratedValue 生成主键策略Column 定义列2.2.4 Spring整合hibernate2.2.5 Dao编写如何在dao中得到HibernateTemplate对象,原来是在applicationContext.xml文件中通过配置方案注入了一个SessionFactory对象,UserDao的父类HibernateDaoSupport,会帮助我们根据SessionFactory来得到HibernateTemplate2.2.6 Service编写问题:service需要事务管理,怎样处理?2.2.7 Action编写使用Controller Scope 以上注解的作用是由spring管理action,它是一个多例的。问题:如何完成struts2框架的流程?2.2.8 基于annotation的ssh整合总结在ssh的annotation整合时,必须要多导入的一个包对于dao,se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 包工包料施工合同
- 土地估价委托合同
- 三农产业发展规划策略方案
- 尾矿库施工方案
- 公路设施护栏施工方案
- 店招工程施工方案
- 2025年果蔬罐头加工项目建议书
- 平顶山古建基础施工方案
- 《红楼梦》阅读题选
- 自然保护区专项施工方案
- 【消毒供应中心护理人员职业暴露与安全防护探究5200字(论文)】
- 2025年湖南省邵阳市新宁县初三第一次联考综合试题含答案
- 2024-2025学年新教材高中地理 第三章 产业区位因素 第二节 工业区位因素及其变化(2)教案 新人教版必修2
- 常用焊管规格表
- 认知心理学:认知科学与你的生活
- 中国文学经典导读智慧树知到答案2024年华东政法大学
- DL∕T 1860-2018 自动电压控制试验技术导则
- 中国与澳大利亚双边贸易全景图(附中澳主要进出口产业数据)
- 【课件】+现实与理想-西方古典绘画+课件高中美术人美版(2019)美术鉴赏
- 离婚被告辩护词格式范文
- 2024年欧洲苯乙烯-马来酸酐共聚物市场主要企业市场占有率及排名
评论
0/150
提交评论