zoukankan      html  css  js  c++  java
  • mybatis流程个人理解

    mybatis的配置文件里面有链接数据库的配置 以及mapper的配置

    首先 mybatis会使用SqlSessionFactoryBuilder来生产SqlSessionFactory工厂

    具体的实现方式

    String resource="spring-mybatis.xml";(这个配置文件里面包含了mapper(这里的mapper一般是spring的配置去扫描项目里面后缀名为mapper.xml的文件)和链接数据库的配置)

    //加载mybatis 的配置文件(它也加载关联的映射文件)
    InputStream is=MybatisUtils.class.getClassLoader().getResourceAsStream(resource);

    //构建sqlSession 的工厂
    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);

    public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
    XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
    return build(parser.parse());
    } catch (Exception e) {
    throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
    ErrorContext.instance().reset();
    try {
    inputStream.close();
    } catch (IOException e) {
    // Intentionally ignore. Prefer previous error.
    }
    }
    }

    注意我们需要将配置文件转成流传入 ,这样mybatis的XMLConfigBuilder 才可以解析配置文件

    然后通过XMLConfigBuilder 会得到包含配置信息的一切东西 比如说链接数据库 和mapper里面的sql(其实就是Configuration这个类里面会把配置文件里面的信息解析给你列好,

    mybatis进行的所有操作都需要根据Configuration中的信息来进行,废话里面都是sql啊什么的)

    接着上面说,我们生成了SqlSessionFactory工厂,这个工厂里面我们已经得到了配置文件的信息,

    同时这个工厂里面除了有配置信息以外,还有SqlSession这个对象,SqlSession中有我们进行数据库操作的增删改查接口

    sqlsessFactory接口

    public interface SqlSessionFactory {

    SqlSession openSession();

    SqlSession openSession(boolean autoCommit);
    SqlSession openSession(Connection connection);
    SqlSession openSession(TransactionIsolationLevel level);

    SqlSession openSession(ExecutorType execType);
    SqlSession openSession(ExecutorType execType, boolean autoCommit);
    SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
    SqlSession openSession(ExecutorType execType, Connection connection);

    Configuration getConfiguration();

    }

    这个时候我们已经得到了配置的信息,最后我们就要开始执行了,这个时候我们建立好了链接,然后把sql拿进去,去调用mybatis的执行器就是

    Executor这个接口,主要提供了update、query方法及事物相关的方法接口,我们SqlSession 对象会根据配置文件传入的执行器类型,然后去调用各种对应的方法去执行,

    具体的实现方法我也不是太清楚这里留个链接有兴趣的可以去看看,https://blog.csdn.net/qq924862077/article/details/50437096。

  • 相关阅读:
    156
    More Effective C++ 条款24 了解virtual function,multiple inheritance,virtual base classes,runtime type identification的成本
    More Effective C++ 条款23 考虑使用其他程序库
    More Effective C++ 条款22 考虑以操作符复合形式(op=)取代其独身形式(op)
    More Effective C++ 条款21 利用重载技术避免隐式类型转换
    More Effective C++ 条款20 协助完成"返回值优化(RVO)"
    More Effective C++ 条款19 了解临时对象的来源
    More Effective C++ 条款18 分期摊还预期的成本
    More Effective C++ 条款17 考虑使用lazy evaluation(缓式评估)
    More Effective C++ 条款16 谨记80-20法则
  • 原文地址:https://www.cnblogs.com/oushiyang/p/9039693.html
Copyright © 2011-2022 走看看