• 【MyBatis】MyBatis源码架构


        基于MyBatis3.4.4

    1、架构图

     

        针对接口层两种调用方式,简单提供两种演示代码

         

      /**
       * 基于statementId
       * @throws IOException
       */
      public void test1() throws IOException {
        //1、读取配置文件 读成字节输入流
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    
        //2.解析配置文件 封装configuration对象  创建DefaultSqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    
        //3.创建DefaultSqlSessionFactory实例对象 设置事务不自动提交,完成executor对象创建
        SqlSession sqlSession = sqlSessionFactory.openSession();
    
        //4. 根据statementId来获取configuration中map集合中到指定的mappedStatement对象
        //   将查询任务委派给executor对象
        List<Object> objects = sqlSession.selectList("namespace.id");
    
      }
    
      /**
       * mapper代理方式
       */
      public void test2() throws IOException {
        //1、读取配置文件 读成字节输入流
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    
        //2.解析配置文件 封装configuration对象  创建DefaultSqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    
        //3.创建DefaultSqlSessionFactory实例对象 设置事务不自动提交,完成executor对象创建
        SqlSession sqlSession = sqlSessionFactory.openSession();
    
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        mapper.findAllUser();
      }

    2、执行流程

    2.1、Executor功能

     1. 简单执行器

      simpleExecutor,每次执行SQL需要预编译SQL语句。


    2. 可重用执行器

      ReuseExecutor,同一SQL语句执行只需要预编译一次SQL语句

    3. 批处理执行器

      BatchExecutor,只针对修改操作的SQL语句预编译一次,并且需要手动刷新SQL执行才生效。

    4. 执行器抽象类

      BaseExecutor,执行上面3个执行器的重复操作,比如一级缓存、doQuery、doUpdate方法。

    5. 二级缓存

      CachingExecutor,与一级缓存的区别:一级缓存查询数据库操作后会直接缓存,二级缓存需要当次数据库操作提交事务后才能进行缓存(二级缓存跨线程处理,一级缓存不用)。 

     

    link:拉钩教育网MyBatis架构源码以及设计模式分析

       鲁班教育网MyBatis源码暴力解析(Executor、Cache)

           MyBatis GitHub

           MyBatis源码中文注解

  • 相关阅读:
    Linux日志清除
    QT vs x64编译
    VC调用QT的UIDLL
    QT UI获得控件ID(HWND)
    安卓黑客工具
    VMware+Windgb+Win7内核驱动调试
    ubuntu 键盘布局修改
    魅族MX3 smart bar处失灵
    把NDK的工具链提取出来单独使用
    arm指令版本
  • 原文地址:https://www.cnblogs.com/kbian/p/13214535.html
Copyright © 2020-2023  润新知