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开发可以节省很多代码,提高效率。