mybatis的事务配置
数据库事务:数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,
这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务
结束之间执行的全部数据库操作组成。
破坏了完整性和一致性。
ACID:
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部
不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序,串行执行的结
果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须
是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,
即使数据库出现故障。
事务的 ACID 特性是由关系数据库系统(DBMS)来实现的,DBMS采用日志来保证事务的原子
性、一致性和持久性。日志记录了事务对数据库所作的更新,如果某个事务在执行过程中发生错
误,就可以根据日志撤销事务对数据库已做的更新,使得数据库回滚到执行事务前的初始状态。
对于事务的隔离性,DBMS是采用锁机制来实现的。当多个事务同时更新数据库中相同的数据
时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事
务才有机会更新该数据。
数据库读操作是不需要事务的。只要写操作才需要配置事务。
使用Mybatis如何配置事务?
1.需要借助spring aop。aop指的是面向切面编程。
2.spring aop配置的事务是基于异常的检测来进行回滚,所以一定不能自己手动捕获异常。
拦截器:
- 需要在springmvc的配置文件中中配置拦截器。
- 编写实现类,实现HandlerInterceptor接口
Interceptor:拦截器。
spring拦截器:
spring登录:
拦截器和过滤器的区别?
- 过滤器是属于javaee中的组件,在web.xml中定义过滤器。而拦截器是springmvc的组件,
需要引入springmvc,并且在配置文件中配置拦截器。 - 过滤器是在到达servlet之前生效。而拦截器是在到达DispatcherServlet之后,分发给
Controller之前生效。 - 拦截器,可以注入spring上下文中的对象。但是过滤器不行,因为过滤器先于spring和
springmvc而创建。 - 过滤器和拦截器提供的要实现的接口方法不一致。
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置其中一个拦截器 -->
<mvc:interceptor>
<mvc:mapping path="/student/list"/>
<!-- 配置拦截器实现类 -->
<bean class="com.situ.interceptors.HelloWorldIntercepto
r" />
</mvc:interceptor>
<mvc:interceptor>
<!-- 要拦截的url匹配模式 -->
<mvc:mapping path="/**"/>
<!-- 不被拦截的url匹配模式 -->
<mvc:exclude-mapping path="/login"/>
<bean class="com.situ.interceptors.LoginInterceptor"></b
ean>
</mvc:interceptor>
</mvc:interceptors>
spring异常处理:
- 在Controller中定义方法,并添加注解@ExceptionHandler,那么此方法可以处理所在controller中出现的异常。缺点:仅对当前controller有效。
- 全局统一异常处理:@ControllerAdvice