接口的类路径 | sql 的 namespace |
---|---|
方法名(不能重载) | sql 的 id(唯一) |
输入参数类型 | sql 的 parameterType |
输出参数类型 | sql 的 resultType |
执行原理 | 根据表达式的值完成逻辑判断并动态拼接 SQL |
---|---|
if | 使用if标签,让我们可以有选择的加入 SQL 语句的片段 |
where | where标签会自动去掉标签体内前面多余的 and / or |
set | 使用set标签动态管理更新(set) 子句,并且动态去掉两端多余的逗号 |
trim | 使用trim标签控制条件部分两端是否包含某些字符 |
choose/when/otherwise | 在多个分支条件中,仅执行一个,类似于 java 的 if,else |
foreach | 迭代,批量更新 |
#{} | ${} |
---|---|
预编译处理 | 字符串替换 |
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值 | Mybatis在处理 $ {}时,就是把${}替换成变量的值 |
可以有效的防止SQL注入,安全 | 有 SQL 注入的风险,不安全 |
概念 | 能够保证不同表的主键具有不重复性,相同的表的主键具有有序性(递增) |
---|---|
1bit 符号位 | 正数是0,负数是1,id 一般取正数 |
41bit 时间戳位 | 就是一个时间戳 |
10bit 工作进程位 | 机器的ID |
12bit 序列号位 | 毫秒内的流水号 |
优点 | 整体上按时间顺序递增,不会产生 ID 碰撞,效率较高 |
概念 | IOC 即控制反转,将创建对象和对象间的依赖关系放入 IOC 容器中交给 Spring 管理 |
---|---|
作用 | 管理对象的创建(生命周期)、维护对象间的依赖关系、解耦 |
原理 | IOC 的实现原理就是工厂模式加反射机制 |
概念 | AOP 也就是面向切面编程,是面向对象的一种补充,在不修改源代码的基础上对业务功能进行增强 |
---|---|
作用 | 减少系统的重复代码、降低系统的耦合度、提高了系统的可维护性、常用于事务、日志处理等 |
原理 | 基于动态代理( JDK 的动态代理、Cglib动态代理) |
工厂模式 | Spring 通过 BeanFactory 或者 ApplicationContext 创建 Bean 对象的时候用到了工厂模式 |
---|---|
单例模式 | Spring 中 bean 的作用域默认为是单例模式的(singleton) |
代理模式 | Spring AOP 基于动态代理,如果要代理的对象实现了某个接口,SpringAOP 会使用 JDK 的动态代理创建代理对象;如果对象没有实现接口,Spring AOP会使用 CGLib 生成一个被代理对象的子类作为代理对象 |
模板方法模式 | Spring 中的 jdbcTemplate 等以 Template 结尾的对数据库操作的类就使用了模板方法模式 |
适配器模式 | SpringAOP 的增强(Advice)使用了适配器模式、SpringMVC的 HandlerAdapter 也是适配器模式 |
观察者模式 | 定义的对象有一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被自动更新,Spring事件驱动模型就是观察者模式一个很经典的应用 |
beanFactory | applicationContext |
---|---|
beanFactory 是 Spring 里面最顶层的接口 | applicationContext 继承BeanFactory 接口 |
beanFactory 是最底层的实现,是面向框架本身的 | applicationContext 应用上下文,有更多高级的用法,是面向开发者的 |
beanfactory 在容器启动的时候不会去实例化 bean,而是在获取 bean 的时候才实例化 | applicationContext 在启动的时候就把所有的 bean 全部实例化了 |
Singleton(单例模式) | Spring 容器中只会存在一个共享的 Bean 实例,无论有多少个 Bean 引用它,始终指向同一对象,线程不安全 |
---|---|
Prototype(原型模式) | 每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例 |
Request | 在一次 Http 请求中,Spring 容器会返回该 Bean 的同一实例 |
Session | 在一次 Http Session 中,Spring 容器会返回该 Bean 的同一实例 |
global Session | 在一个全局的 Http Session 中,Spring 容器会返回该 Bean 的同一个实例 |
属性注入 | 有选择的通过Setter方法完成调用类所需依赖的注入,更加灵活方便 |
---|---|
构造器注入 | 通过调用类的构造器,将接口实现类通过构造函数变量传入 |
接口注入 | 将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供的注入方法(必须先声明一个借接口) |
Spring MVC 是一个基于 Java 的实现了 MVC设计思想的轻量级 Web 框架
MVC 的设计思想,就是复杂的 web 应用分成 Model,View,Controller 三层,有利于前后端分离、简化开发、方便开发人员之间的配合
作用 | 该注解的作用是用来完成请求与请求处理方法的映射 |
---|---|
位置 | 该注解可以标注在类上或者是方法上 |
value 属性 | 用于指定映射的请求 URL,默认属性,唯一时可省略 |
method 属性 | 指定映射的请求方式 |
params 属性 | 指定映射的请求参数 |
headers 属性 | 指定映射的请求头信息 |
过滤器 | 拦截器 |
---|---|
过滤器基于函数回调 | 拦截器基于反射机制 |
过滤器基于Servlet容器 | 拦截器基于 SpringMVC 这样的表述层框架 |
过滤器可以对所有请求生效 | 拦截器只能在框架内部生效 |
过滤器不能直接访问框架内的资源对象 | 拦截器可以访问框架内的资源对象(例如Spring IOC容器中的对象) |
前端控制器 DispatcherServlet | 接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度 |
---|---|
处理器映射器 HandlerMapping | 根据请求的 URL 来查找 Handler 方法 |
处理器适配器 HandlerAdapter | 负责执行 Handler 方法 |
后端控制器(处理器) Handler | 需要程序员开发 |
视图解析器 ViewResolver | 进行视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图 |
视图 View | View是一个接口, 它的实现类支持不同的视图类型 |
(1)用户发送请求至前端控制器 DispatcherServlet
(2) DispatcherServlet 收到请求后,调用 HandlerMapping 处理器映射器,请求获取Handle方法
(3)处理器映射器根据请求 url 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
(4)DispatcherServlet 调用 HandlerAdapter 处理器适配器
(5)HandlerAdapter 经过适配调用具体处理器(Handler,也叫后端控制器)
(6)Handler执行完成返回 ModelAndView
(7)HandlerAdapter 将 ModelAndView 返回给 DispatcherServlet
(8)DispatcherServlet 将 ModelAndView 传给ViewResolver 视图解析器进行解析
(9)ViewResolver 解析后返回具体的视图 View
(10)DispatcherServlet 对视图 View 进行渲染视图(将模型数据填充至视图中)
(11)最后 DispatcherServlet 响应给用户