- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章事务与并发 - GoogleCode
第7章 事务与并发
对于初学者来说,数据库事务是个比较抽象的概念,本章首先简要叙述事务的四特性,然后实例讲解如何使用事务,以便初学者能更直观理解事务,再学入讲解锁的实现原理与应用,最后给出一个完整的包含事务的系统架构。
数据事务的四个特性为:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。
一致性:事务在完成时,必须使所有的数据都保持一致状态,而且在相关数据中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都应该是正确的。
隔离性:由并发事务所做的修改必须与任何其他事务所做的修改相隔离。一个事务范围内所能查询到的数据要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改完成并提交后的状态,而不会查看由另一个并发事务正在修改但并未提交的数据。
持久性:一旦一个事务提交,就保证对数据的改变是永久性的已提交事务的更新不丢失//通过Hibernate session对象取得数据库连接
Connection connection = getSession().connection();
try{
//开启事务
connection.setAutoCommit(false);
PreparedStatement prepareStatement = connection.prepareStatement(delete from SYS_TASK);
//执行删除
prepareStatement.execute();
//提交
mit();
}catch (Exception e) {
//出现异常,回滚
connection.rollback();
}Transaction transaction = null;
try{
//开启事务
transaction = getSession().beginTransaction();
//保存对象
getSession().save(object);
//将数据刷出到数据库,相当于上段代码的prepareStatement.execute();
getSession().flush();
//提交事务
mit();
}catch (Exception e) {
//回滚
transaction.rollback();
}finally{
//关闭Session
getSession().close();
}
读者可以打上断点,单步调试使用以上代码,让程序执行到getSession().commit()这一句前,暂停执行,然后使用数据库查询客户端直接连上数据库,查询对应的表是否有你当前正要插入的数据,切身体会一下实实在在的事务。
7.2 结合Spring使用声明式事务
在企业应用中,一般使用声明式事务,即事务只在配置文件中配置即可,至于事务的开始、提交和回滚等操作则全由事务管理器完成,在业务逻辑中只需要调用DAO的保存、删除或修改等操作,无需关心事务。
使用Spring来管理Hibernate事,可使用配置文件统一配置,也可以使用注解的方式,笔者比较偏向在配置文件中统一配置的方式,这更便于形成统一的规范,更便于维护。配置Spring的事务也有多种方式,这里只列出一种比较常用的,所以读者如果在其他地方看到不一样的配置,并不奇怪。使用的Spirng的工程中,一般在web.xml中会有如代码清单7-3所示的配置,在系统启动时ContextLoaderListener就会读取类路径根目录下所有以applicationContext开头的xml文件,并根据其内容初始化Spirng容器。
代码清单7-3 web.xml中配置Spring监听器
context-param
param-namecontextConfigLocation/param-name
param-value
classpath:/applicationContext*.xml
/param-value
/context-param
listener
listener-class
org.springframework.web.context.ContextLoaderListener
/listener-class
/listener
以上是使用Spirng需要的配置,其实与事务无关,下面才开始applicationContext.xml配置事务,如代码清单7-4所示。
代码清单7-4 配置Sring编程式事务
?xml version=1.0 encoding=UTF-8?
beans xmlns=/schema/be
文档评论(0)