java面试--基础6(框架)
文章目录
- SpringMVC
- Spring MVC处理请求流程
- @RequestMapping的Ant和占位符
- Springmvc中获取Servlet的原生对象
- Cookie获取和设置
- SpringMVC中的转发和重定向
- SpringMVC支持Ajax
- @controller和@restcontroller有什么区别
- 拦截器、过滤器、AOP
- Rest风格
- Mybatis
- mybatis的工作原理
- JDBC、Mybatis、Hibernate的区别
- 瞬时状态,持久状态,托管状态
- 外键
- 集合
- SqlSessionFactory、SqlSession
- 缓存
- Mybatics中map映射的两种方式
- 动态SQL
- Spring
SpringMVC
Spring MVC处理请求流程
用户发起请求--进入前端控制器(进入springmvc的入口也是一个Servlet)
前端控制器会根据用户请求的不同调用对应的页面控制器(Servlet)
页面控制器调用biz,dao之后会得到一个数据model
将model和view视图(仅仅只是名字)统一打包之后返回前端控制器
将数据Model渲染到view视图中
最终将带有数据的页面返回给用户
@RequestMapping的Ant和占位符
*任意字符
http://localhost:9090/SpringMvc2/ant/bbbbb/ant1.html
**任意多层字符
http://localhost:9090/SpringMvc2/ant/a/b/c/d/e/ant2.html
?一个问号是一个字符,允许多个问号
http://localhost:9090/SpringMvc2/ant/ant3a.html
http://localhost:9090/SpringMvc2/ant/ant4aa.html
{xxx}占位符,多级路径
http://localhost:9090/SpringMvc2/abc/123/ant.html
Springmvc中获取Servlet的原生对象
request和session
response
Cookie获取和设置
SpringMVC中的转发和重定向
SpringMVC默认的跳转方式是转发
SpringMVC支持Ajax
@controller和@restcontroller有什么区别
@RestController注解相当于@ResponseBody + @Controller合在一起的作用
拦截器、过滤器、AOP
过滤器
Filter:过滤的是全部的请求,不能细致到方法
拦截器
Interceptor:过滤可以细致到某个类的中的某个方法,必须是进入springmvc控制层的才能过滤。
AOP
AOP:可以过滤全部请求的全部方法,细致到任意层。
Rest风格
Mybatis
mybatis的工作原理
MyBatis先创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
JDBC、Mybatis、Hibernate的区别
JDBC:创建数据库,创建表,创建字段,开启,关闭数据库,SQL语句,
查询rs.next(rs.getxx)获取每个字段属性
Mybatis:创建数据库,创建表,创建字段 SQL语句
Hibernate:创建数据库,调用提供的方法add update delete query,
瞬时状态,持久状态,托管状态
瞬时状态(new出来还没有关联到数据库的),每次启动执行完这个对象就销毁了
持久状态(关联到数据库),实体对象和数据库同步
托管状态:实体对象和数据库中有关联,但是session关闭了。
只有重新获取session变回持久状态
外键
集合
SqlSessionFactory、SqlSession
SqlSessionFactory:单例设计模式,从项目运行期间只有一个
(项目和数据库创建链接)
SqlSession:每次HTTP请求都创建一个新的链接,每次使用完毕都要关闭。
(一次CRUD操作)
缓存
一级缓存
一级缓存:存储作用域为Session,当Session flush 或 close之后,该Session中的所有 Cache 就将清空。或者如果就算不close只要有进行其他的commit操作,session依然会失效。(几乎不用)
二级缓存
二级缓存与一级缓存其机制相同,不同在于其存储作用域为Mapper(Namespace)就是一个配置文件
缓存的作用
提高效率不需要每次都进行查询,证券股票(实时查询不适合使用缓存),缓存必须支持脏数据
Mybatics中map映射的两种方式
注解方式;xml的方式
*两种有什么区别?
---复杂的用xml;简单的用注解方式直接写sql语句
动态SQL
if
choose、when、otherwise
trim、where、set
foreach
bind
Spring
IOC和DI的区别
IOC:控制反转:dao biz不在类中进行创建和维护,
交给外部容器进行创建。统一管理做到单例模式
DI: 依赖注入:dao biz 不在类内部进行new,外部容器创建之后必须注入进来,
由于是私有的属性,所以可以通过构造方法也可以通过set方式注入
区别:
1.它们是spring核心思想的不同方面的描述。
2.依赖注入和控制反转描述的角度不同。
依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:
应用程序依赖容器创建并注入它所需要的外部资源;
控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,
由容器反向的向应用程序注入应用程序所需要的外部资源。
依赖注入的两种方式
构造方法注入
Set方式注入
@Autowired 与@Resource的区别
Spring默认支持的是@Autowired,@Autowired默认是根据类型进行查找的
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行
装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不
到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到
或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装
配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配
AOP
面向横切的思想,思考入手点是横向的,各个模块都需要使用到的功能,
统一出来编写,不需要模块知道具体共同部分的细节,通过外部配置织入
AOP能干什么,也是AOP带来的好处
1:降低模块的耦合度
2:使系统容易扩展
懒加载
bean默认启动服务器就全部创建,设置为懒加载后就是第一次使用该bean的时候才创建
Spring中的bean有几种配置方式
传统的XML配置方式
基于注解的配置
基于类的Java Config
Bean的作用域有几个
单例(默认),每次创建,request ,session application
Spring的配置文件有哪些内容
开启事务注解驱动
事务管理器
开启注解功能,并配置扫描包
配置数据源
配置SQL会话工厂、别名、映射文件