• MyBatis底层原理----查询工作流程


    https://blog.csdn.net/qq_42798661/article/details/90138529

    MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession

    Mybatis封装了JDBC,也就是说,把对数据库的会话和事务控制封装在SqlSession对象中

    注 : Mybatis在初始化时,会将配置信息全部加载到内存中并且通过org.apache.ibatis.session.Configuration实例来维护

    1. 使用SqlSession时会传递statementId(即配置在Mapper中的Select的Id属性值)给它里面的SelectList函数,并返回结果

    2. SelectList方法会根据statrmentId去键值对Configuration(key为namespace+id)中查找相对应的MappedStatement(在初始化的时候被加载,值是Mapper中的sql),将查询任务派给执行器Executor返回结果

    3. 执行器Executor会根据MappedStatement等参数去query中解析动态sql生成保存sq的BoundSql对象,供给StatementHandler使用

      执行器Executor会生成缓存key,调用重载query方法进行判断,有key值就返回,没有就将各种参数传递给queryFormDatabase方法(依靠doQuery方法)直接从数据库中读取数据,放入缓存

        doQuery先创建java.lang.Statement(JDBC连接)对象,接着根据参数创建出StatementHandler对象来执行查询操作,然后将StatementHandler通过Statement的prepareStatement进行预编译,最后调用StatementHandler.query()方法,返回List结果集

    4. StatementHandler对象主要完成两个工作:

      (1)通过parameterize方法对Statement对象进行设值连接(由prepareStatement方法可了解到)。

        在parameterize方法的中使用ParameterHandler对象setParameters来完成对Statement的设值

        setParameters负责根据我们输入的参数,对statement对象的 ? 占位符处进行赋值,即使用了typeHandler来完成java对象到jdbc对象的映射

        TypeHandler,类型转换器,在mybatis中用于实现java类型和JDBC类型的相互转换

      (2)通过query方法完成执行statement,并且将statement执行返回的resultset封装为List返回。

         StatementHandler 的List query是调用了ResultSetHandler的handleResultSets(Statement) 方法。ResultSetHandler的handleResultSets(Statement) 方法会将Statement语句执行后生成的resultSet 结果集转换成List 结果集

     

    插一条实现过程:

     

  • 相关阅读:
    go2基本类型
    go1
    android studio 使用
    ios34---GDC,dispatch_once
    ios33--线程通信
    ios33--线程安全
    ios32---线程的状态
    ios31--NSThread
    ios30---pthread, NSThread, GCD, NSOperation
    ios29--多线程
  • 原文地址:https://www.cnblogs.com/lingcheng7777/p/12016819.html
Copyright © 2020-2023  润新知