基于注解方式
事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
例如:在银行转账的时候,假设要从账户A转账100元到账户B,只允许两种情况发生:①转账成功,即账户A余额减少100并且账户B余额增加100 ②转账失败,即账户A的余额不变并且账户B的余额不变。 除了这两种情况之外的都绝对不允许发生。
BookShopDao接口
1 2 3 4 5 6 7 8 9 10 11 |
|
BookShopDao接口的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
BookStockException.java和UserAccountException.java为自定义的两个异常类,继承RuntimeException。
BookShopService接口
1 2 3 4 |
|
BookShopService接口的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
applicationContext.xml配置
1 2 3 4 5 6 7 8 9 10 |
|
测试
1 2 3 4 5 6 7 8 |
|
事务的传播行为及事务的注解配置
定义接口CashierImpl.java及实现类。实现类如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
BookShopServiceImpl实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
测试方法
1 2 3 4 |
|
基于配置文件方式
BookShopDao接口
1 2 3 4 5 6 7 8 9 10 11 |
|
BookShopDao接口的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
BookStockException.java和UserAccountException.java为自定义的两个异常类,继承RuntimeException。
BookShopService接口
1 2 3 4 |
|
BookShopService接口的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
applicationContext.xml配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
测试
1 2 3 4 |
|