Spring,Springmvc,MyBatis

MyBatis 就是将数据库层的操作代码进行了封装

mybatis.xml配置文件

Spring,Springmvc,MyBatis

mybatis的基本实现

Spring,Springmvc,MyBatis

sql语句拼接 

SET语句:

Spring,Springmvc,MyBatis

trim去除指定内容的前缀后缀

Spring,Springmvc,MyBatis

foreach,标签,便利list集合

Spring,Springmvc,MyBatis

list集合的遍历

Spring,Springmvc,MyBatis

最终形成  id  in (1,2,3,4,5,6,7,8,9)  类似这种形式

map、数组的便利,插入操作

Spring,Springmvc,MyBatis

最终形成, values  (1,2) ,(1,3) ,(1,4) ,(1,5)

include标签,在sql语句中引入别的sql语句

Spring,Springmvc,MyBatis

实体类中含有对象的动态拼接语句

Spring,Springmvc,MyBatis

实体类中含有 list对象,其list中装着其他另外一个对象的 拼接方式

Spring,Springmvc,MyBatis

resultMap  N+1的方式 实际就是多了select属性

Spring,Springmvc,MyBatis

Spring,Springmvc,MyBatis

MyBatis 的缓存,

同一个sqlSession 对象,操作同一个sql资源,是从缓存中读取的,

不同的sqlSession对象,操作同一个sql资源,都会缓存,资源浪费

解决办法:使用factory缓存

Spring,Springmvc,MyBatis

开启后流程:

使用sqlSession对象操作数据库的时候,会现在sqlSession自己的缓存中查看是否有现成的数据

,有就返回,没有则继续查看factory的缓存中是否拥有,有返回,没有则去数据库中获取资源,

将资源返回的同时,在sqlSession的缓存中存储,当sqlSession被 commit或者close的时候,会将缓存

的数据刷入到factory中

Mybatis 的ThreadLocal的封装

ThreadLocal对象中存储的数据只在当前线程内有效

解决问题是,不同线程获取的factory对象是相同的,但是获取的sqlSession对象是不同的

Spring,Springmvc,MyBatis

注解方式查询:

Spring,Springmvc,MyBatis

Mybatis的运行原理

Spring,Springmvc,MyBatis

SpringIOC  也叫控制反转, 控制:容器创建对象的过程,反转: 将对象返回给调用代码的过程

核心原理: 创建一个容器对象,将责任链中需要解耦的对象全部存储到容器中,由本来的直接创建

变成现在的从容器中获取,如果需要对对象进行升级,对容器中的对象进行替换就可以

SpringIOC创建对象3种方式:

1.1.无参构造器配置 bean

Spring,Springmvc,MyBatis

1.2.有参数构造器

Spring,Springmvc,MyBatis

2.1静态工厂的方式 配置bean

Spring,Springmvc,MyBatis

2.2动态工厂方式配置bean

Spring,Springmvc,MyBatis

3.1属性注入方式

Spring,Springmvc,MyBatis

3.2 属性注入方式的 依赖注入

Spring,Springmvc,MyBatis

SpringAOP的学习

实现不修改源代码的功能扩展, AOP依赖IOC,要扩展的切点,必须被spring管理

第一种方式:schema-based的方式

前置通知

Spring,Springmvc,MyBatis

后置通知

Spring,Springmvc,MyBatis

环绕通知

Spring,Springmvc,MyBatis

异常通知

Spring,Springmvc,MyBatis

配置xml文件,将通知交给spring管理,定义切点方法

Spring,Springmvc,MyBatis

第二种方式:AspectJ 方式

Spring,Springmvc,MyBatis

配置XML文件

Spring,Springmvc,MyBatis

ASPECTJ 方法二

Spring,Springmvc,MyBatis

需要扫描你的通知的AOP包

Spring,Springmvc,MyBatis

Spring,Springmvc,MyBatis

SpringAOP帮助我们实现代码功能的扩展是使用了代理设计模式

静态代理:程序员自己编写的

动态代理:代理对象是动态生成的,

1. JDK 动态代理,

实现了 InvocationHandler  接口 ,有代理对象,代理方法,代理对象接受的实参

底层基于反射实现的

   2.cglib动态代理 : 必须继承真实对象,是真实对象的子类

创建一个实现了MethodInterceptor接口的java类,并且复写方法intercept

Spring,Springmvc,MyBatis

开始cglib动态代理

Spring,Springmvc,MyBatis

Spring的事务管理TX

Spring整合了mybatis之后,SqlSession对象由我们自己创建变成了spring管理,实现事务管理

的方法有2种,1.  从Spring中获取被管理的mybatis对象,然后使用对象自己完成事务管理代码的编写   ----- 编程式事务

2.让Spring进行事务的管理,我们只需要声明哪些代码需要被事务管理-----声明式事务

DataSourceTransactionManager

Spring,Springmvc,MyBatis

事务的7种传播行为   propagation

Spring,Springmvc,MyBatis

事务隔离的5种级别

Spring,Springmvc,MyBatis

事务的回滚操作

Spring,Springmvc,MyBatis

事务的操作处理

Spring,Springmvc,MyBatis

Spring的5种自动注入的属性

Spring,Springmvc,MyBatis

default,默认使用全局的注入的方式,在beans标签中配置,

no ,不使用自动注入

constructor  根据构造器的形参类型进行匹配

Spring,Springmvc,MyBatis

配置文件的注入

Spring,Springmvc,MyBatis

Spring中Bean的scope属性

1.singletom 单利,同一个id无论获取多少次都是同一个对象

2.prototype,在获取getBean的时候,就算是同一个id每次获取的对象都不一样

3.request每次请求重新实例化

4.session每个会话对象内,对象是单例的

5.application 在application对象内饰单例的

Spring的注解

Spring,Springmvc,MyBatis

Spring的常见注解及其作用:

1. @Component 创建类对象,相当于配置<bean/>

bean的ID默认为类名首字母小写,也可以指定ID,例如@Component("stu")

2. @Service 与@Component功能相同.

2.1 写在ServiceImpl类上.

3. @Repository 与@Component功能相同.

3.1 写在数据访问层类上.

4. @Controller 与@Component功能相同.

4.1 写在控制器类上.

5. @Resource(不需要写对象的get/set)

5.1 java中的注解

5.2 默认按照byName注入,如果没有名称对象,按照byType注入

5.2.1 建议把对象名称和spring容器中对象名相同

6. @Autowired(不需要写对象的get/set)

6.1 spring的注解

6.2 默认按照byType注入.

7. @Value() 获取properties文件中内容

Spring,Springmvc,MyBatis

Spring,Springmvc,MyBatis

8. @Pointcut() 定义切点

9. @Aspect() 定义切面类

10. @Before() 前置通知

11. @After 后置通知

12. @AfterReturning 后置通知,必须切点正确执行

13. @AfterThrowing 异常通知

14. @Arround 环绕通知

注意:

使用注解,一定要在配置文件中声明注解扫描

<context:component-scan base-package="包名路径"></context:component-scan>

SpringMVC  就是用来实现 servlet和其他层解耦的,出现了controller层

1.首先在web.xml中 配置,加载springMVC 配置文件的方式

Spring,Springmvc,MyBatis

2.配置springmvc.xml文件

Spring,Springmvc,MyBatis

SpringMVC之获取请求的数据

restFul形式

Spring,Springmvc,MyBatis

请求Key名和形参不一致的时候

Spring,Springmvc,MyBatis

获取数组

Spring,Springmvc,MyBatis

响应ajax 请求数据 响应回去直接就是数据,不是字符串

Spring,Springmvc,MyBatis

SpringMVC之响应

请求转发:forward:默认可以不写,/代表当前项目   如果不写forward   自定义视图解析器会添加前缀和后缀

重定项:redirect: 必须写, /也代表当前项目,

view对象的响应方式

Spring,Springmvc,MyBatis

ModelAndView方式

Spring,Springmvc,MyBatis

SpringMVC上传,设置form表单的属性为   multipart/form-data

Spring,Springmvc,MyBatis

设置JSP跳转页面的公共方法

Spring,Springmvc,MyBatis

拦截器的实现

Spring,Springmvc,MyBatis

拦截器的执行顺序

Spring,Springmvc,MyBatis

Spring,Springmvc,MyBatis

Spring,Springmvc,MyBatis

SpringMVC 的核心4大组件

DispatcherServlet : servlet分发器,整个SpringMVC框架的入口

HandlerMapping:寻找URL所请求的HanDlerMethod,验证合法性

HandlerAdapter:实际调用HandlerMethod的组件

viewResovler:视图解析器