A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我是楠楠 于 2017-12-19 10:41 编辑

【郑州校区】JavaEE三大框架课堂笔记之Spring-day11(上)

Spring事务管理机制
Spring事务管理的四个优点:
1. 提供一致的对于不同的事务管理的API
2. 支持声明式事务管理(重点)
3. 编程事务管理(在开发中应用比较少)
4. 优秀的整合与Spring的数据访问
我们重点讲解spring的事务管理的相关的API,还有声明式事务管理
Spring事务管理主要提供了三个接口来完成
1. org.springframework.transaction.PlatformTransactionManager
这是一个事务管理器,可以来选择相关的平台(jdbc  hibernate  jpa…)
2. TransactionDefinition
它定义事务的一些相关信息 例如 隔离 传播 超时 只读
3. TransactionStatus
它主要描述事务具体的运行状态
PlatformTransactionManager
平台事务管理器
在不同的持久化层解决技术它的事务代码不一样。
JDBC开发
        Connection con=……;
        con.setAutoCommit(false);//开启事务
        con.rollback();
        con.commit();
Hibernate开发
        Session session=….;
        Transaction t=session.beginTransaction();
        t.commit();
        t.rollback();
PlatformTransactionManager接口API
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsF5D9.tmp.jpg
DataSourceTransactionManager 主要针对于JdbcTemplate开发  MyBatis开发
HibernateTransactionManasger主要针对于Hibernate开发
JpaTransactionManager 主要针对于JPA开发。
TransactionDefinition
它描述的是事务的定义信息。
        
在TransactionDefinition中定义了大量的常量
隔离
以下是关于隔离性相关信息
事务的四个特性 ACID  原子性 一致性 隔离性 持久性。
不考虑事务隔离性有什么问题?
        脏读,不可重复读 虚读。
ISOLATION_DEFUALT 它使用后端数据库的默认隔离级别(spring中选项)
ISOLATION_READ_UNCOMMITTED 不能解决问题,会发生脏读 不可重复读 虚读
ISOLATION_READ_COMMITTED 可以解决脏读 会产生不可重复读与虚读。
ISOLATION_REPEATABLE_READ 可以解决脏读,不可重复读 解决不了虚读
ISOLATION_SERIALIZABLE 串行化,可以解决所有问题
对于不现的数据库,它的底层默认事务隔离级别不一样。
Oracle数据库它默认的是read_committed
Mysql数据库它默认的是repeatable_read.
超时
默认值是-1 它使用的是数据库默认的超时时间。
只读
        它的值有两个true/false,如果选择true一般是在select操作时
        
传播
它解决的是两个被事务管理的方法互相调用问题。它与数据库没关系,是程序内部维护的问题。
以下定义了事务的传播行为
以上操作中最常用的三种:
PROPAGATION_REQUIRED 默认值 两个操作处于同一个事务,如果之前没有事务,新建一个事务
两个操作处于不同的事务
PROPAGATION_NESTED
它是一种嵌套事务,它是使用SavePoint来实现的。事务回滚时可以回滚到指定的savepoint,注意:它只对DataSourceTransactionManager有作用
以下了解
PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
PROPAGATION_NOT_SUPPORTED 以非事务运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务运行,如果有事务存在,抛出异常
TransactionStatus
它定义了事务状态信息,在事务运行过程中,得到某个时间点的状态
声明式事务管理事务管理方式
1. 编码方案 不建议使用,它具有侵入性。在原有的业务代码基础上去添加事务管理代码
2. 声明式事务控制,基于AOP对目标进行代理,添加around环绕通知。
这种方案,它不具有侵入性,不需要修改原来的业务代码
基于xml配置声明式事务管理方案
第一步:在applicationContext.xml文件中添加aop与tx的名称空间
第二步:在applicationContext.xml文件中配置
        Spring提供的advice是传统的spring advice
1. 声明事务管理器
2. 配置通知
Spring为我们提供了一个TransactionInterceptor来完成增强
对于这个增强,我们可以使用spring为我们提供的一个标签<tx:advice>来完成操作
3. 配置切面
因为使用的是传统的spring的advice,需要使用<aop:advisor>
基于annotation声明式事务管理方案
可以使用@Transaction来在类或方法上添加声明式事务管理
注意:需要在applicationContext.xml文件中使用
相当于开启注解事务控制
问题:关于xml方式与annotation方式的优缺点?
        从简单上来说,使用注解更方便。
        使用配置的方案,可以对事务配置进行集中维护。
SSH框架整合
SSh=struts2+spring+hibernate  
struts2 2.3.24
spring 4.2.4
hibernate 5.0.7
关于xml配置文件的整合方式SSH整合jar包Struts2框架需要jar包
Asm 是关于字节码操作
Commons-fileupload 关于文件上传
Commons-io 关于io流操作工具
Commons-lang 也是一个工具,包含了关于数据与字符串操作
Freemaker 标签库模板文件
Javassist 它也是关于字节码操作,动态代理可以使用它实现(类似于cglib)
Log4j关于日志
Ognl 关于ognl表达式
Struts2-core  xwork-cor  struts2框架底层是使用xwork
Struts2与spring整合还需要这个包
如果需要使用struts2提供的json处理
注意:如果使用注解方案,我们还需要导入一个jar包
Hibernate框架需要的jar包
Antlr 语法解析包
Dom4j 解析xml
Geronimo-jta  apache geronimo它是一个开源javaEE服务器 Geronimo-jta是这个开源项目提供jar包,在hibernate中是关于jta事务相关
Hibernate-commoins-annotations
这个包是我们在hibernate下来使用jpa相关的注解,这样它不依赖于hibernate
Hibernate-core 开发hibernate必须
Hibernate-jpa 它是关于hibernate对jpa的支持
Jandex 用于索引annotation
Javassist 关于字节码操作(注意:strtus2中也引入这个jar包了)
Jboss-logging 它是关于jboss统一日志处理
如果使用关于jpa相关操作需要导入jpa依赖jar包
C3p0连接池
还需要数据库相关的驱动jar包
还需要静态日志处理
Spring框架需要的jar包
Spring最基本jar包
AOP开发
Spring jdbc
Spring  事务管理需要tx
Spring整合hibernate
Spring整合web开发
如果使用到junit测试
还需要commons-loggin jar包
创建工程完成整合前期准备
需要的配置文件:
Strtsu2框架   src/strtus.xml
Hibernate框架   src/hibernate.cfg.xml  在domain有 Xxx.hbm.xml
Spring框架   src/applicationContext.xml
关于日志   log4j.properties
关于数据库连接   db.properties
Spring整合hibernate
        基本原理:就是由spring来管理hibernate的SessionFactory
方式一:零障碍整合(了解)
        我们只需要使用spring中提供的一个LocalSessionFacotry来加载Hibernate的配置文件。
Ssh-xml工程加载到服务器后,如果可以自动创建表,就代表spring整合hibernate ok.
注意:我们必须配置spring的ContextLoaderListener
方式二(spring管理hibernate配置)
不在需要hibernate.cfg.xml文件,所有关于hibernate.cfg.xml文件中的配置都在spring的配置文件中来配置。
首先要配置数据源
接下来引入properties文件
创建LocalSessionFactoryBean来完成spring管理hibernate中的SessionFactory
上述的props可以简化成下面方案
加载hbm.xml配置文件
mappingResources它类似于我们之前<mapping resource=””>
mappingLocations它加载时是根据类路径加载 classpath:路径
mappingJarLocations它会加载jar文件中的hbm.xml文件
mappingDirectoryLocations 它加载的目录
spring整合hibernate后的DAO
spring整合hiberante后,我们的dao只需要继承HibernateDaoSupport类
在HibernateDaoSupport中只需要注入SessionFactory就可以获得到HibernateTemplate,它是对hibernate操作的一个简单封装,可以让我们方便使用原来hibernate的操作.
编写service及测试
测试
事务管理
HibernateTemplate API介绍
保存操作  session.save()
修改操作  session.update()
删除操作  session.delete()
类似于session.saveOrUpdate()根据持久化对象的状态来判断执行save或update
获取操作   get()  load()
Find操作  类似于session.createQuery().setParameter().list()
类似于hibernate中的QBC查询,完全的面向对象方案
下面这个可以执行命名查询
可以在User.hbm.xml文件中定义hql或sql


传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出


2 个回复

倒序浏览
好多干货,
回复 使用道具 举报
{:8_507:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马