事务是一种机制,在数据库的修改操作中需要用到,比如说hibernate中推荐使用事务,spring中aop控制事务,mybatis中工厂提交分手动和自动!等等,看见事务的重要性!!
事务:一条或者一组sql语句组成的工作单元,这一个工作单元作为一个整体,要么都成功,要么都失败!
事务特性(acid):
- 原子性:事务也就是工作单元是最小的操作组件,不可再分.
- 一致性:事务操作要么都成功,要么都失败.
- 不变性:操作前后的总量是不变的.
- 隔离性:事务之间独立,互不干扰.
需要注意的是,尤其是在hibernate中,如果方法执行了,但是修改操作却没有成功,那么这个时候就要查看事务这里是否监控了,就是hibernate必须有事务.仅限create/update/delete
举个aop配置的例子:
<!--对事务的监控-->
<aop:config proxy-target-class="true">
<aop:pointcut id="txPointcut" expression="execution(* com.javakc.rbac.*.service.impl.*.*(..))"/>
<aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
</aop:config>
<!--具体方法的操作-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="query*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>