`
ahua186186
  • 浏览: 562955 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mybatis3源码核心类4--BaseExecutor

 
阅读更多
1.update:   清除缓存,然后委托给StatementHandler实现类处理
 @Override
  public int update(MappedStatement ms, Object parameter) throws SQLException {
    ErrorContext.instance().resource(ms.getResource()).activity("executing an update").object(ms.getId());
    if (closed) {
      throw new ExecutorException("Executor was closed.");
    }
    clearLocalCache();
    return doUpdate(ms, parameter);
  }



2.query:  先尝试从一级缓存或二级缓存查询数据,没有查询到则从数据库中查数据
@Override
  public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {
    BoundSql boundSql = ms.getBoundSql(parameter);
    CacheKey key = createCacheKey(ms, parameter, rowBounds, boundSql);
    return query(ms, parameter, rowBounds, resultHandler, key, boundSql);
 }

  @SuppressWarnings("unchecked")
  @Override
  public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
    ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId());
    if (closed) {
      throw new ExecutorException("Executor was closed.");
    }
    if (queryStack == 0 && ms.isFlushCacheRequired()) {
      clearLocalCache();
    }
    List<E> list;
    try {
      queryStack++;
      list = resultHandler == null ? (List<E>) localCache.getObject(key) : null;
      if (list != null) {
        handleLocallyCachedOutputParameters(ms, key, parameter, boundSql);
      } else {
        list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql);
      }
    } finally {
      queryStack--;
    }
    if (queryStack == 0) {
      for (DeferredLoad deferredLoad : deferredLoads) {
        deferredLoad.load();
      }
      // issue #601
      deferredLoads.clear();
      if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT) {
        // issue #482
        clearLocalCache();
      }
    }
    return list;
  }

分享到:
评论

相关推荐

    mybatis-3-mybatis-3.2.6

    1. **配置解析**:MyBatis的配置文件(mybatis-config.xml)被解析成Configration对象,这个对象包含了所有的全局配置信息,如数据源、事务管理器、Mappers等。解析过程主要由XMLConfigBuilder类完成。 2. **...

    mybatis-3.5.9 源码(mybatis-3-mybatis-3.5.9.zip)

    在 MyBatis-3.5.9 版本中,我们可以深入源码,探究其内部机制和优化点。 1. **SqlSessionFactory 和 SqlSession** - SqlSessionFactory 是 MyBatis 的核心组件,它用于创建 SqlSession 对象,每次数据库操作都需要...

    开发工具 mybatis-3.4.2

    3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3

    mybatis-3.2.2-src.rar 源码

    这个源码包"mybatis-3.2.2-src.rar"包含了完整的Mybatis 3.2.2版本的源代码,对开发者来说是一份宝贵的学习资源。 源码分析可以从以下几个主要方面展开: 1. **架构设计**:Mybatis 的核心组件包括...

    mybatis-plus源码(mybatis-plus-3.5.1.zip)

    4. **GlobalConfig**:全局配置类,包含了MyBatis-Plus的各种配置项。 5. **BaseMapper**和**BaseService**:这两个接口定义了基本的数据库操作方法。 6. **Wrapper**系列:QueryWrapper、UpdateWrapper等,用于构建...

    MyBatis-Plus 的官方示例(mybatis-plus-samples-master.zip)

    mybatis-plus-sample-reduce-springmvc: 简化掉默认mapper类示例(Spring MVC版本) mybatis-plus-sample-generator: 代码生成器示例 mybatis-plus-sample-crud: 完整 CRUD 示例 mybatis-plus-sample-wrapper: 条件...

    mybatis-spring-boot-starter-2.0.0.jar

    mybatis mybatis-spring-boot-starter-2.0.0.jar下载

    mybatis-plus-boot-starter-3.4.3.3.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...

    mybatis-plus-boot-starter-3.1.0.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-spring-boot-starter-2.1.3.jar

    mybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jarmybatis-spring-boot-starter-2.1.3.jar

    mybatis逆向工程mybatis-generator-core-1.3.2jar包

    在本案例中,我们关注的核心是`mybatis-generator-core-1.3.2.jar`这个文件,它是MyBatis逆向工程的主要实现库。 MyBatis Generator (MBG) 是一个能够自动生成Java源代码和XML配置文件的工具,这些文件与MyBatis...

    mybatis-spring-boot-starter-2.1.4.jar

    mybatis-spring-boot-starter-2.1.4.jarmybatis-spring-boot-starter-2.1.4.jar

    mybatis-generator-config-1-0.dtd

    mybatis-generator-config_1_0.dtd文件存在于mybatis-generator-core-1.3.2.jar包中,路径如下org/mybatis/generator/config/xml/mybatis-generator-config_1_0.dtd 可以设置开发工具的dtd配置,配置...

    MyBatis3_用户指南--MyBatis-3-User-Guide-zh_CN.pdf

    MyBatis3_用户指南--MyBatis-3-User-Guide-zh_CN.pdf 非常实用

    mybatis-plus-boot-starter-3.3.0.jar

    mybatis-plus-boot-starter.jar 各个版本下载, SpringBoot 集成 MybatisPlus jar 包下载, Mybatis-Plus(简称MP)是一个基于MyBatis的增强工具库,它简化了与数据库的交互操作并提供了一系列增强功能,使开发者...

    mybatis-3-mybatis-3.5.8.zip源码

    在mybatis-3-mybatis-3.5.8.zip源码中,我们可以深入理解MyBatis的工作原理和设计模式。这个版本的MyBatis包含以下几个主要模块: 1. **SqlSessionFactoryBuilder**: 用于构建SqlSessionFactory,它是MyBatis的核心...

    mybatis-spring-boot-autoconfigure-2.1.3.jar_idea安装maven插件

    mybatis-spring-boot-autoconfigure-2.1.3mybatis-spring-boot-autoconfigure-2.1.3

    mybatis-3.5.9 源码(mybatis-3-mybatis-3.5.9.tar.gz)

    通过对 MyBatis-3.5.9 源码的学习,开发者可以深入理解其工作原理,从而更好地优化自己的代码,解决潜在的问题,甚至为 MyBatis 做出贡献。这份源码不仅包含了 MyBatis 的核心功能,还反映了设计模式和最佳实践,...

    mybatis-3-mybatis-3.5.7.zip源码

    1. **配置文件解析**:MyBatis的核心配置文件`mybatis-config.xml`定义了数据源、事务管理器、Mappers等关键元素。通过`XMLConfigBuilder`解析这些配置,构建出`Configuration`对象,它是整个MyBatis框架的中心。 2...

Global site tag (gtag.js) - Google Analytics