zoukankan      html  css  js  c++  java
  • 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 结果集

     

    插一条实现过程:

     

  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/lingcheng7777/p/12016819.html
Copyright © 2011-2022 走看看