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

Ibatis源码阅读LRU (least recently used) 之LruCacheController

阅读更多

/*

 *  Copyright 2004 Clinton Begin

 *

 *  Licensed under the Apache License, Version 2.0 (the "License");

 *  you may not use this file except in compliance with the License.

 *  You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 *  Unless required by applicable law or agreed to in writing, software

 *  distributed under the License is distributed on an "AS IS" BASIS,

 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 *  See the License for the specific language governing permissions and

 *  limitations under the License.

 */

package com.ibatis.sqlmap.engine.cache.lru;

 

import java.util.Collections;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Properties;

 

import com.ibatis.sqlmap.engine.cache.CacheController;

import com.ibatis.sqlmap.engine.cache.CacheModel;

 

/**

 * LRU (least recently used) cache controller implementation

 */

public class LruCacheController implements CacheController {

 

  private int cacheSize;

  private Map cache;

  private List keyList;

 

  /**

   * Default constructor

   */

  public LruCacheController() {

    this.cacheSize = 100;

    this.cache = Collections.synchronizedMap(new HashMap());

    this.keyList = Collections.synchronizedList(new LinkedList());

  }

 

  public int getCacheSize() {

    return cacheSize;

  }

 

  public void setCacheSize(int cacheSize) {

    this.cacheSize = cacheSize;

  }

 

  /**

   * Configures the cache

   *

   * @param props Optionally can contain properties [reference-type=WEAK|SOFT|STRONG]

   */

  public void setProperties(Properties props) {

    String size = props.getProperty("cache-size");

    if (size == null) {

      size = props.getProperty("size");

    }

    if (size != null) {

      cacheSize = Integer.parseInt(size);

    }

  }

 

  /**

   * Add an object to the cache

   *

   * @param cacheModel The cacheModel

   * @param key        The key of the object to be cached

   * @param value      The object to be cached

   */

  public void putObject(CacheModel cacheModel, Object key, Object value) {

    cache.put(key, value);

    keyList.add(key);

    if (keyList.size() > cacheSize) {

      try {

        Object oldestKey = keyList.remove(0);

        cache.remove(oldestKey);

      } catch (IndexOutOfBoundsException e) {

        //ignore

      }

    }

  }

 

  /**

   * Get an object out of the cache.

   *

   * @param cacheModel The cache model

   * @param key        The key of the object to be returned

   * @return The cached object (or null)

   */

  public Object getObject(CacheModel cacheModel, Object key) {

    Object result = cache.get(key);

    keyList.remove(key);

    if (result != null) {

      keyList.add(key);

    }

    return result;

  }

 

  public Object removeObject(CacheModel cacheModel, Object key) {

    keyList.remove(key);

    return cache.remove(key);

  }

 

  /**

   * Flushes the cache.

   *

   * @param cacheModel The cache model

   */

  public void flush(CacheModel cacheModel) {

    cache.clear();

    keyList.clear();

  }

 

}

 

0
6
分享到:
评论

相关推荐

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    通过阅读和理解iBatis的源码,我们可以更深入地了解其设计思路,从而更好地利用这个框架,提升我们的开发效率和代码质量。同时,源码学习也能帮助我们解决实际项目中遇到的问题,增强我们在ORM领域的专业技能。

    ibatis源码

    阅读和分析iBATIS源码,可以帮助开发者: 1. **理解工作原理**:了解iBATIS如何解析SQL映射文件,如何执行SQL,如何处理结果集映射,以及事务控制等关键流程。 2. **优化性能**:通过源码,可以找出可能的性能瓶颈...

    最新ibatis 源码

    ibatis源码 学习参考 对于学习ibatis很有帮助

    iBATIS框架源码剖析

    iBATIS框架源码剖析

    ibatis源码+api文档+jar包

    1. 源码阅读:源码中包含Ibatis的所有核心组件,如SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession等。通过阅读源码,可以深入了解其工作原理,例如如何加载配置文件、如何创建和管理SqlSession、如何执行...

    iBATIS框架源码剖析源码

    通过深入分析iBATIS的源码,开发者不仅可以了解其工作原理,还能学习到设计模式、数据库访问的最佳实践以及如何优雅地处理数据库操作。对于提升Java开发者的技能和理解数据库访问层的实现有极大的帮助。在实际开发中...

    iBatis框架源码剖析

    iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和·NET的持久层框架。

    ibatis框架源码剖析光盘资料

    《ibatis框架源码剖析》是一本深入探讨mybatis前身——ibatis的源码解析书籍。通过对源码的深入分析,我们可以理解ibatis的核心机制,掌握数据库操作的底层原理,从而更好地利用和优化这个强大的持久层框架。在这个...

    springMVC+ibatis的源码

    通过学习和分析这个源码,开发者不仅可以深入了解SpringMVC和iBatis的协同工作原理,还可以掌握如何在Eclipse这样的IDE中配置和运行这样的项目。这有助于提升对MVC模式的理解,提高数据库操作的能力,以及熟练运用...

    iBATIS2.3.4 jar包及源码

    在本主题中,我们关注的是iBATIS 2.3.4版本的jar包及其源码。 首先,`ibatis-2.3.4.jar` 是包含iBATIS核心库的二进制文件,用于在Java应用中集成iBATIS。这个jar包包含了所有必要的类和资源,如SQL映射接口、数据...

    ibatis源码及实例

    iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data ...

    iBatis源码jar包以后上传

    这个“iBatis源码jar包以后上传”可能指的是将要分享或者提供iBatis的源码jar包,以便于开发者深入学习和理解其内部工作原理。 首先,让我们来了解一下iBatis的基本概念和工作流程。iBatis的核心是SQL Map配置文件...

    ibatis源码 例子

    ibatis 源码 例子 包含 源码,jar都有 部分代码 package com.icss.dao; import java.io.IOException; import java.io.Reader; import java.sql.SQLException; import java.util.List; import ...

    ibatis2.3源码

    【标题】"ibatis2.3源码"指的是开源的SQL映射框架iBATIS的2.3版本的源代码。iBATIS是Java平台上的一种轻量级持久层框架,它将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作。 【描述】中的"可以...

    IBatis源码+xsd+帮助

    1. **动态SQL**:IBatis的核心功能之一就是动态SQL,它允许在SQL语句中使用条件判断,使SQL更具灵活性。 2. **映射文件和映射器接口**:源码中包含了Mapper接口和对应的XML映射文件,展示了如何定义和执行SQL查询。 ...

    ibatis 2.3.4 源码

    ibatis 2.3.4 的源码 public abstract Object insert(String paramString, Object paramObject) throws SQLException; public abstract Object insert(String paramString) throws SQLException; public ...

    ibatis 学习源码

    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" ...

Global site tag (gtag.js) - Google Analytics