`
ahua186186
  • 浏览: 561979 次
  • 性别: 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-plus-boot-starter-3.4.3.3.jar

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

    mybatis-spring-boot-starter-2.0.0.jar

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

    mybatis-plus-boot-starter-3.1.0.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逆向工程mybatis-generator-core-1.3.2jar包

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

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

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

    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-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核心源码

    mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码...

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

    以下是关于MyBatis-Plus 3.0的一些核心知识点: 1. **基础概念**:MyBatis-Plus是一个轻量级的Java框架,主要功能包括自动化 CRUD(创建、读取、更新、删除)操作,支持自定义SQL、存储过程以及丰富的查询条件构造...

    mybatis-3-config/mapper.dtd 解决mybatis头文件报错

    然后打开eclipse -&gt;Window-&gt;prefenrence-&gt;XML-&gt;XML Catalog-&gt;User Specifiled Entreis-&gt;Add-&gt;Location(此处是你放dtd文件的位置例如:‪D:\mybatis\mybatis-3-config.dtd)-&gt;Key(如果更改config,此处应该是:-//...

    mybatis-plus快速入门项目-mybatis-plus基本操作大全-附带sql+项目文档

    QueryWrapper是MyBatis-Plus的核心组件之一,它允许你方便地构建动态SQL。你可以通过链式调用设置查询条件,如eq(等于)、ne(不等于)、like(模糊匹配)等。 7. **主键自动生成策略** MyBatis-Plus支持多种...

    mybatis-generator-maven-plugin-1.4.0.jar

    java运行依赖jar包

Global site tag (gtag.js) - Google Analytics