MyBatis提供了一级缓存和二级缓存
- 一级缓存:也称为本地缓存,用于保存用户在一次会话过程中查询的结果,用户一次会话中只能使用一个sqlSession,一级缓存是自动开启的,不允许关闭。
- 二级缓存:也称为全局缓存,是mapper级别的缓存,是针对一个表的查结果的存储,可以共享给所有针对这张表的查询的用户。也就是说对于mapper级别的缓存不同的sqlsession是可以共享的
IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,IOC(控制反转),将创建对象的控制权由自己把控转移到spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系;
DI(依赖注入),将对象之间的依赖关系交由框架处理,减低组件之间的耦合性,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
AOP(面向切面编程)可以说是OOP的补充和完善.AOP将相同的业务逻辑按照横向切割的方式抽取到一个独立的模块中形成切面,将通知织入到方法连接点前后,底层使用的是动态代理
① PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
② PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
③ PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
④ PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
⑤ PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
⑥ PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
⑦ PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。
1.原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用
2.一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的。
3.隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的
4.持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响
脏读一个事务读到另一个事务未提交的更新数据
幻读是一个事务在前后两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行。
不可重复读是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据
就是一个事务读到另一个事务修改后并提交的数据。在同一个事务中,对于同一组数据读取到的结果不一致。
脏读:------修改时加排他锁 读取时加共享锁
不可重复度:------读取时加共享锁 写数据时加排他锁
幻读:------范围锁------锁定检索范围为只读 间隙锁。
01、用户发送出请求到DispatcherServlet(前端控制器)。
02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的控制器(可查找xml配置或注解配置),生成处理器对象的执行链(如果有),再一起返回给DispatcherServlet。
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(controller)。
06、Controller执行完成返回ModelAndView对象。