Spring的数据库操作和事务管理

1、Spring对数据库访问技术的支持
1)对DAO提供了一下支持
一致的异常处理DataAccessException
一致的DAO抽象类DaoSupport、Template
2)通过DBCP创建数据库源,整合JDBC
DBCP(DataBase Connection Pool)数据库连接池,是Java数据库连接池的一种。通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。
需要追加数据库包:
a:commons-dbcp.jar 连接池
b:commons-collections.jar dbcp需要的commons包
c:commons-pool.jar dbcp需要的commons包
注意:mysql数据库的连接包不能少
补充:
连接池组件中管理的单元,在连接池可以管理Connection对象的创建和销毁。
连接池还可以控制和管理Connection对象的数量
连接池组件的优势:可以提高程序的稳定性,可以灵活的控制访问的连接数量
a、使用API
JdbcDaoSupport 用于编写DAO组件的支持
JdbcTemplate 用于完成增删改查操作
updata() 增删改操作
query()、queryForObject()、queryForInt等查询操作
execute()其他语句,例如建表、修改表结构语句
b、XML配置
首先定义连接池之后将DataSource注入给所有DAO组件
3) 通过C3P0创建数据库源
需要追加的包:
a、c3p0-0.9.5.5.jar
b、machange-commons-java-0.2.19.jar
注意:mysql数据库的连接包不能少

2.Transaction

    事务是一系列严密操作动作,要么都操作完成,要么都回滚撤销
    Spring事务管理基于底层数据库本身的事务处理机制    
    数据库事务的基础,是掌握Spring事务管理的基础

1)事务具备ACID四种特性,分别是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和 Durability(持久性)
a、原子性(Atomic)
事务最基本的操作单元,要么全部成功,要么全部失败,不会结束在中间某个环节
事务在执行过程中发生错误,会被回滚到事务开始前的状态,就想这个事务出来没有执行过一样
b、一致性(Consistency)
如果事务成功的完成,那么系统中所有变化将正确的应用,系统处于有效状态
如果事务中出现错误,那么系统中所有变化将自动回滚,系统返回原始状态。
c、隔离性(Isolation)
指的是在并发环境中,当不同的事务同时操作相同的数据时,每个事物都有各自的完整数据空间
由并发事务所做的修改必须与任何其他事务所做的修改隔离
事务查看数据库更新时,数据所处的状态要么是一个事务修改它之前,要么是一个事物修改它之后,事务不会查看到中间状态的数据
d、持久性 (Durability)
指的是只要事务成功结束,它对数据库所做的更新就必须是永久保存下来。即使发生系统崩溃,重启数据系统后,数据库还能恢复到事务成功结束时的状态
2)事务传播机制
Spring的事务传播机制主要包括声明式事务和编程式事务
a、编程式事务也就是通过代码实现,是将事务管理代码嵌入到业务方法中来控制事务的提交和回滚。在编程式事务管理时,必须在每个事务操作中包含额外的事务管理代码,一次一般不会使用
b、声明式事务是建立 在AOP基础上,其本质是在方法前后进行拦截,然后在目标方法开始之前创建一个事务,在执行这个目标方法结束之后,根据执行情况提交或进行回滚事务。声明式事务最大的特点就是不需要通过编码的方式进行管理事务,这样就不需要在业务逻辑代码中掺杂书屋管理的代码,只需要在配置文件中做相关的事务规则说明,便可将事务规则应用到业务逻辑中
c、Spring在TransactionDefinition接口中定义了七个事务传播行为:
required:如果当前有事务在运行,当前的方法就在这个事务内运行,否则就启动一个新的事务,并在自己的事务内运行。这就是常见的事务操作,事务的默认行为
required_new:当前的方法必须启动新事务,并在他自己的事务内运行,如果有事务正在运行,应该将它挂起
supports: 如果有事务在运行,当前的方法就是在这个事务内运行,否则它可以不运行在事务中
mandatory:当前的方法必须运行在事务内部,如果没有正在运行的事务抛出异常
not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
never:以非事务方式执行操作,如果当前存在事务,则抛出异常
nested:如果当前事务正在运行,当前的方法就应该在这个事务内嵌套四五运行,否则启动一个新的事务,并在它自己的事务内运行

3、隔离级别
隔离级别定义了一个事务可能受其他并发事务影响的程度
1)ISOLATION_DEFAULT:使用后端数据库默认的隔离级别
2)读未提交ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致数据脏读、幻读或不可重复读
3)读已提交ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读和不可重复读仍有可能发生 Oracle默认
4)可重复读ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果是一致的,除非数据是被事务自己所修改,可以阻止脏读和不可重复读,当幻读仍有可能发生 MySql数据库默认
5)串行化ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定(禁止增删改)事务相关的数据库表来实现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值