SSM面试

作者: 全满 | 来源:发表于2018-09-11 19:08 被阅读86次

    Mybatis

    • 简介
    1. mybatis支持普通sql查询,存储过程和高级映射的优秀持久层框架,Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检查,Mybatis使用简单的xml或注解用于配置和原始映射,将接口和Java的POJO(plan old Java Object)普通的Java对象映射成数据库的记录
    2. 每个mybatis应用程序主要都是使用SqlSessionFaction实例的,一个sqlSessionFaction实例可以通过sqlSessionFactionBuilder获得,SqlSessionFactionBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得
    3. mybatis有一个实用类(Resources)它由很多方法,可以很方便地从类路径及其他位置加载资源
    • 流程
      • 加载配置并初始化
        • 触发条件:加载配置文件
        • 将sql的配置信息加载成为一个个mappedStatment对象,包括了传入参数映射
        • 配置执行的sql语句,结果集映射配置,存储在内存中
      • 接受调用请求
        • 触发条件:调用mybatis提供的API
        • 传入参数:为sql的id和传入参数对象
        • 处理过程:将请求传递给下层的请求处理层进行处理
      • 处理操作请求
        • 触发条件:API接口层传递请求过来
        • 传入参数:为sql的id和传入参数对象
        • 处理过程:
    1. 根据sql的id查找对应的MappedStatment对象
    2. 根据传入参数对象解析MappedStatment对象,得到最终要执行的sql和执行传入的参数
    3. 获取数据连接,根据得到最终的sql语句和执行传入参数到数据库执行,并得到执行结果
    4. 根据MappedStatment对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果
    5. 释放连接资源
    6. 返回处理结果将最终的处理结果返回
    • 功能架构(三层)
    1. API接口层:

    提供给外部使用的接口API,开发人员通过本地API操作数据库,接口层接到调用请求,就会调用数据处理来完成具体的数据处理

    1. 数据处理层:

    负责具体的sql查找、解析、执行和执行结果映射处理等,主要的目的是根据调用的请求完成一次数据库的操作

    1. 基础支持层

    负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来做最基础的组件,为上层的数据处理层提供最基础的支撑

    • 框架结构
    1. 加载配置

    配置来源于两个地方:
    1).配置文件中
    2).Java代码的注解,将sql的配置信息加载为一个MappedStatment对象(包括传入参数映射配置,执行sql语句,结果映射配置)存储在内存中

    1. sql解析

    当API接口层接收到调用请求时,会接收到传入sql的id和传入对象(可以是map、JavaBean或基本类型),mybatis会根据sql的id找到对应的MappedStatment,然后传入参数对象的MappedStatment进行解析,解析后可以得到最终的要执行的sql语句和参数

    1. sql执行

    将最终得到的sql和参数拿到数据库进行执行,得到操作数据库的结果

    1. 结果映射

    将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本类型,并将最终结果返回

    mybatis中#{}与${}的区别

    • ${}

    properties文件中的占位符,可用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver

    • #{}

    sql的参数占位符,Mybatis会将sql中的#{}替换为,在sql执行前会使用preparedStatement的参数设置方法,按序给sql占位符设置参数值,比如ps.setInt(0,ParameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()

    XML映射文件中,除了常见的selectinsertupdatedelete标签之外,还有哪些标签

    <resultMap>返回值类型、<sql><include><selectKey>加上动态sql的9个标签(trimwheresetforeachifchoosewhenotherwisebind)其中<sql>sql片段标签,通过<include>标签引入sql片段,<selectKey>为不支持自增的主键生产策略标签

    一个XML文件都会写一个Dao接口与之对应,工作原理

    Dao接口,常说的mapper接口,接口的权限名就是映射文件中的namespace的值,接口的方法名,就是映射文件MappedStatmentid值,接口方法的参数就是传递给slq的参数,mapper接口是没有实现类的,当调用接口方法时,接口权限名+方法名拼接字符串作为key值,可唯一定位一个mappedStatment
    Dao接口里的方法是不能重载的,因为是权限名+方法名的保存和寻找策略

    Mybatis是如何分页的

    mybatis是使用RowBounds对象进行分页的,针对ResultSet结果集进行的内存分页而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页的功能

    springMVC

    • 是一个mvc框架,在web模型中,mvc是一种很流行的框架,通过把modelviewcontroller分离,把较为复杂的web应用分成逻辑清晰的几部分,是为了简化开发,减少出错,或是为了组内开发人员之间的配,总之就是一种分层工作的办法
    • 是spring的一个子框架,当然拥有spring的特性,如依赖注入,注解:RequestMapping,专门负责映射的url

    spring是什么

    spring是开源的轻量级的开发应用框架,目的是用于简化企业级应用程序开发

    • 原理

    通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发

    spring框架除了帮助我们管理对象及其依赖关系,还提供了日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我们管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA)与各种javaEE技术整合,提供一套自己的web层框架springMVC,而且还能非常简单的与第三方web框架集成

    • 作用

    能帮助我们根据配置文件创建及组装对象之间的依赖关系(无需重新编译,只需要修改配置文件)
    spring提供了与第三方数据访问框架无缝集成,而且自己提供了一套JDBC/springMVC框架,方便数据库/web层搭建(第三方web【如struts、JSF】)

    为什么需要spring

    1. 应用程序

    是能完成我们所需的功能的成品,比如:购物网站、OA系统

    1. 框架

    是能够完成功能的半产品,框架规定了开发过程中的整体架构,提供了基础功能

    1. 非侵入式设计

    从框架角度可以理解为,无需继承框架提供的类

    1. POJO(plan old java Object)简单的Java对象

    它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其他java框架的类或接口

    1. 轻量级及重量级

    轻量级是相对于重量级而言的,轻量级一般是非入侵性的,所依赖的东西非常少,资源占用非常少,部署简单,极易使用,重量级相反

    1. 容器

    装对象的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期

    1. 控制反转

    即Inversion of Control(IOC)/ 依赖注入(Dependency Injection),即由容器控制程序之间的关系,而非由程序直接操控

    1. Bean

    一般指容器管理对象,在spring中指springIOC容器管理对象

    为什么使用spring

    能帮助我们简化应用程序开发,帮助我们创建和组装对象,为我们管理事务,简单的mvc框架,可以把spring看作是一个超级粘合平台,能够把很多技术整合在一起,形成一个整体,使系统结构更出众,更优秀,从而加速我们程序开发

    Spring的BeanFactory和ApplicationContext的区别

    spring使用BeanFactory来实例化配置和管理对象,但是它只是一个接口,里面有一个getBean()方法,我们一般都不直接用BeanFactory,而是用它的实现类ApplicationContext,这个类会自动解析我们配置的applicationContext.xml,然后根据我们配置的beannew对象,将new好的对象放进一个Map中,键就是我们beanid,值就是new的对象
    BeanFactoryspring中比较原始的Factory,如XMLBeanFactory就是一种典型的BeanFactory,原始的BeanFactory无法支持spring的许多插件,例如:AOP、web应用等
    ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能

    容器是spring的核心

    • BeanFactory

    spring中比较原始的Factory,如XMLBeanFactory就是一种典型的BeanFactory,原始的BeanFactory无法支持spring的许多插件,例如:AOP、web应用等

    • ApplicationContext

    三个实现类

    1. classPathXMLApplication:把上下文文件当成类路径资源
    2. FileSystemXMLApplication:从文件系统中的XML文件载入上下文定义信息
    3. XMLWebApplicationContext:从web系统中的XML文件载入上下文定义信息
    • 作用

    BeanFactory负责读取Bean配置文档,管理Bean的加载,实例化,维护Bean之间的依赖关系,负责Bean的生命周期
    ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能
    a. 国际化支持
    b. 资源访问
    c. 时间传递(通过实现ApplicationContextAware接口)

    常用的获取ApplicationContext的方法

    • FileSystemXMLApplicationConrext

    从文件系统或者url指定的xml配置文件创建参数为配置文件名或文件名数组。

    • classPathXMLApplicationContext

    从classPath的xml配置文件创建,可以从jar包中读取配置文件

    相关文章

      网友评论

        本文标题:SSM面试

        本文链接:https://www.haomeiwen.com/subject/kkvugftx.html