1.Spring框架相关组件
Spring Core:核心类库,提供IOC服务
Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等)
Spring AOP:AOP服务
Spring DAO:对JDBC的抽象,简化了数据访问异常的处理
Spring ORM:对现有的ORM框架的支持
Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传
Spring MVC:提供面向Web应用的Model-View-Controller实现
2.spring常用注解
@Controller 标注当前类为容器的对象,代表控制组件
@Service 标注当前类为容器的对象,代表服务组件
@Repository 标注当前类为容器的对象,代表持久组件
@Component 标注当前类为容器的对象,代表组件
@Autowired 自动装配注解 默认按类型装配
@Transactional 事务注解
@Value 将配置文件中的值,注入到指定字段
@Bean 配置bean对象
@Configuration 标注当前的java类是一个配置类
3.SpringMVC运行流程
(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
4.Mybatis中使用到了哪些设计模式
1.Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
2.工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
3.单例模式,例如ErrorContext和LogFactory;
4.代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
5.装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现;
6.组合模式,例如SqlNode和各个子类ChooseSqlNode等;
7.模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;
8.适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
9.迭代器模式,例如迭代器模式PropertyTokenizer;
5.介绍一下MyBatis的一级缓存二级缓存
一级缓存:默认开启
一级缓存的范围是同一个SqlSession对象,当我们使用SqlSession对象进行查询时mybatis会帮我们把查询的数据存入到内存中,当我们在这个SqlSession中再一次执行同样的查询操作时,我们就可以直接去缓存中获取数据
二级缓存:默认关闭
二级缓存是mapper级别的缓存,多个SqlSession共享,其作用域是mapper的同一个namespace,不同的SqlSession两次执行相同的namespace下的sql语句,且向sql中传递的参数也相同,即最终执行相同的sql语句,则第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。
顺序: 二级缓存 ———> 一级缓存 ——> 数据库
6.一对一、一对多的关联查询
一对一关联查询
在xml中定义映射关系, 使用association代表关联一个实体类, property映射的属性名,javaType该属性的实体类类型,fetchType是否延迟加载,column用于执行select方法所传递的参数,select需要执行的mapper方法的全限定名称一对多的关联查询
在xml中定义映射关系,因为是一个集合 所以使用collection标签,ofType代表集合中实体类的类型,其他属性和上面对一的情况一致
7.MyBatis与Hibernate有哪些不同**
(1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。
(2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。
(3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。