zoukankan      html  css  js  c++  java
  • Mybatis的cache

    相关类:org.apache.ibatis.executor.CachingExecutor

    相关代码:

      public <E> List<E> query(MappedStatement ms, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {
        BoundSql boundSql = ms.getBoundSql(parameterObject);
        CacheKey key = createCacheKey(ms, parameterObject, rowBounds, boundSql);
        return query(ms, parameterObject, rowBounds, resultHandler, key, boundSql);
      }

    从CacheKey key = createCacheKey(ms, parameterObject, rowBounds, boundSql);可以看出,当下列四个元素相同时会使用cache:

    MappedStatement(一般为xml中定义)、parameterObject(传递给xml的参数)、rowBounds(分页参数)、boundSql(最终sql,由MappedStatement和parameterObject决定)

    createCacheKey的代码:

      public CacheKey createCacheKey(MappedStatement ms, Object parameterObject, RowBounds rowBounds, BoundSql boundSql) {
        if (closed) throw new ExecutorException("Executor was closed.");
        CacheKey cacheKey = new CacheKey();
        cacheKey.update(ms.getId());
        cacheKey.update(rowBounds.getOffset());
        cacheKey.update(rowBounds.getLimit());
        cacheKey.update(boundSql.getSql());
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        if (parameterMappings.size() > 0 && parameterObject != null) {
          TypeHandlerRegistry typeHandlerRegistry = ms.getConfiguration().getTypeHandlerRegistry();
          if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
            cacheKey.update(parameterObject);
          } else {
            MetaObject metaObject = configuration.newMetaObject(parameterObject);
            for (ParameterMapping parameterMapping : parameterMappings) {
              String propertyName = parameterMapping.getProperty();
              if (metaObject.hasGetter(propertyName)) {
                cacheKey.update(metaObject.getValue(propertyName));
              } else if (boundSql.hasAdditionalParameter(propertyName)) {
                cacheKey.update(boundSql.getAdditionalParameter(propertyName));
              }
            }
          }
        }
        return cacheKey;
      }
  • 相关阅读:
    IE6,7,8在boostrap中兼容h5和css3
    Bootstrap表格类名及对应图形
    兼容低于IE9不支持html5标签的元素的方法
    transition与animation的区别
    position与offset的区别
    天坑之mysql乱码问题以及mysql重启出现1067的错误解决
    如何远程连接Windows server上的MySQL服务
    mysql如何让自增id从1开始设置方法
    mybatis association嵌套association的两级嵌套问题
    @Param注解在dao层的使用
  • 原文地址:https://www.cnblogs.com/chanedi/p/4009059.html
Copyright © 2011-2022 走看看