Mybatis的初始化与执行流程

像InternalResourceViewResolver这种能解析所有的视图,即永远能返回一个非空View对象
    的ViewResolver,一定要把它放在ViewResolver链的最后面。

DispatcherServlet执行过程:前端控制器接收请求,前端控制器请求处理映射器,处理映射器根据配置找到
对应的Handler,将结果返回给前端控制器,前端控制器请求处理适配器执行Handler,Handler执行完后返回
ModelAndView给前端控制器,前端控制器请求视图解析器找到对应的视图返回给前端控制器,前端控制器对
视图渲染并装填模型数据到view的request域
--------------------------------Mybatis的整体架构-----------------------------------------
Mybatis的部分基础模块:
    在实际开发中,一般很少使用Mybatis的事务管理,而是Mybatis和Spring集成时,使用Spring管理事务
    1.数据源:在数据源中提供了所有建立数据库连接的信息。
    2.缓存机制:Mybatis提供了一级缓存和二级缓存。需要注意的是Mybatis自带的这两级缓存与Mybatis及
整个应用是运行在JVM中的,共享一块堆内存,如果两级缓存的数据量过大,可能会影响系统中其它功能的
运行,所以需要缓存大量数据时,建议考虑Redis、Memcache等缓存产品。
    3.Binding模块:Mybatis通过Binding模块将用户自定义的Mapper接口与映射配置文件关联起来,系统
可以通过自定义Mapper接口中的方法执行相应的Sql语句完成数据库操作。

Mybatis的初始化流程:
    任何框架的启动无非是加载自己运行时所需的配置信息,Mybatis的配置信息
主要在mybatis-config.xml中,这些XML配置信息,Mybatis将其存入Configuration中,Configuration作为
配置信息的容器。等Configuration对象初始化完成后,就可以使用Mybatis操作数据库了。换言之,Mybatis
初始化的过程就是创建Configuration对象的过程。

    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    //初始化流程主要代码
    SqlSessionFactory sqlSessionFactory = new
    SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    List list = sqlSession.selectList("");

    (1)将配置文件mybatis-config.xml加载成InputStream输入流。
    (2)通过SqlSessionFactoryBuilder的build()方法创建SqlSessionFactory
    对象。
    (3)通过SqlSessionFactory的openSession()方法创建SqlSession对象。
    (4)执行Mapper文件中的查询语句,获取查询结果。
    MyBatis的初始化流程主要发生在第(2)步,SqlSessionFactoryBuilder根据
    传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的
    SqlSessionFactory实例。
        MyBatis的初始化要经过以下几步:
        (1)客 户 端 Client 调 用 SqlSessionFactoryBuilder 对 象 的
        build(inputStream)方法。
        (2)SqlSessionFactoryBuilder 会 根 据 输 入 流 inputStream 等 信 息 创 建
        XMLConfigBuilder对象。
        (3)SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法。
        (4)XMLConfigBuilder对象返回Configuration对象。
        (5) SqlSessionFactoryBuilder 根 据 Configuration 对 象 创 建 一 个
        DefaultSessionFactory对象。
        (6)SqlSessionFactoryBuilder 返 回 DefaultSessionFactory 对 象 给
        Client,供Client使用。

    SqlSessionFactoryBuilder().build(inputStream);主要涉及MyBatis的初始化流
    程,而 sqlSessionFactory.openSession()、sqlSession.selectList("") 和
    sqlSession.close()涉及MyBatis执行流程。

Mybatis的执行流程:
    (1)SqlSessionFactory调用openSession()方法获取SqlSession对象,
    SqlSession对象封装了对数据库的CRUD(增删改查)和事务控制。

    (2)为SqlSession传递一个配置SQL语句的Statement Id和参数,然后返回结
    果。Statement Id = namespace + <select> 标签的id属性.
        MyBatis在初始化的时候,会将MyBatis的配置信息全部加载到内存中,使用
    Configuration实例来维护。可以使用sqlSession.getConfiguration()方法来获取。
    AyUserMapper.xml配置文件加载到内存中会生成一个对应的MappedStatement对象,
    然后以key="com.ay.dao.AyUserDao. findById ",value为MappedStatement对象
    的形式维护到Configuration的一个Map中。当以后需要使用的时候,只需要通过Id值
    获取即可。
        综上所述,SqlSession的职能是,根据Statement Id,在MyBatis配置对象
    Configuration中获取到对应的MappedStatement对象,然后调用MyBatis执行器来
    执行具体的操作。

    (3)MyBatis执行器Executor根据SqlSession传递的参数执行query()方法,
    最 后 会 创 建 一 个 StatementHandler 对 象,然后将必要的参数传递给
    StatementHandler,使用StatementHandler来完成对数据库的查询,最终返回List
    结果集。
    Executor的功能和作用是:
        1.根据传递的参数,完成SQL语句的动态解析,生成BoundSql对象,供StatementHandler使用。
        2.为查询创建缓存,以提高性能。
        3.创建JDBC的Statement连接对象,传递给StatementHandler对象,返回List查询结果。

    (4)StatementHandler对象负责设置Statement对象中的查询参数、处理JDBC
    返回的resultSet,将resultSet加工为List集合返回。
    StatementHandler对象主要完成以下两个工作:
        1.对于JDBC的PreparedStatement类型的对象,在创建的过程中,使用的是SQL
        语句,字符串会包含若干个"?"占位符,其后再对占位符进行设值,
        StatementHandler通过parameterize(statement)方法对Statement进行设
        值。
        2.StatementHandler 通 过 List<E> query(Statement statement,
        ResultHandler resultHandler)方法来完成执行Statement,和将Statement
        对象返回的resultSet封装成List。
    StatementHandler的parameterize(Statement)方法调用了ParameterHandler
    的 setParameters(statement) 方 法 , ParameterHandler 的
    setParameters(Statement)方法负责根据输入的参数对statement对象的"?"占
    位符处进行赋值。

参考书籍:Spring+Mybatis企业应用实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值