`
pan_java
  • 浏览: 289504 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis 源码分享1---FifoCacheController

    博客分类:
  • java
阅读更多
最近在学习Ibatis 源码,看到FifoCacheController在项目很有用途分享大家

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

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;

/**
 * FIFO (first in, first out) cache controller implementation
 */
public class FifoCacheController implements CacheController {

  private int cacheSize;
  private Map cache;
  private List keyList;

  /**
   * Default constructor
   */
  public FifoCacheController() {
    this.cacheSize = 100;
    
     //用Map放key value 可以用ConcurrentHashMap优化性能
     this.cache = Collections.synchronizedMap(new HashMap());
     //用LinkedList放key
     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) {
    return cache.get(key);
  }

  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();
  }

}
分享到:
评论

相关推荐

    iBATIS-SqlMaps-2-Tutorial_cn.pdf

    iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf

    ibatis-sqlmaps-2_cn

    《ibatis-sqlmaps-2_cn》是一本专注于介绍IBATIS框架的中文教程,非常适合初学者和有经验的开发者进行深入学习。IBATIS,作为一个轻量级的持久层框架,它为Java应用程序提供了数据库操作的支持,尤其在处理SQL映射...

    iBATIS-SqlMaps-2-快速入门教程.docx

    知识点1:iBATIS-SqlMaps-2 简介 iBATIS-SqlMaps-2 是一个基于 Java 的持久层框架,旨在简化 Java 应用程序中的数据库交互。它提供了一种灵活的方式来映射 Java 对象到数据库表,允许开发者使用 SQL 语句来操作...

    iBATIS-SqlMaps-2_cn中文文档

    iBATIS-SqlMaps-2_cn中文文档

    iBATIS-SqlMaps-2-Tutorial_cn

    《iBATIS-SqlMaps-2-Tutorial_cn》是一本针对初学者的优秀教程,它深入浅出地介绍了iBATIS这一流行的数据访问框架。iBATIS,作为Java世界中的一个轻量级持久层框架,它提供了一种将SQL查询与Java代码解耦合的方法,...

    Ibatis基本配置---[环境搭建

    Ibatis基本配置---[环境搭建

    apache开源项目源码ibatis-3-core-src-3.0.0.227(ibatis框架java源程序)

    apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...

    iBATIS-SqlMaps-2 PDF文档资料(日文)

    iBATIS-SqlMaps-2 是一套针对Java开发者的开源持久层框架,它提供了一种将SQL语句和Java代码分离的方式,使得开发者可以更灵活地处理数据库操作。本资料集为日文版,旨在帮助熟悉日语的开发者了解和掌握iBATIS-Sql...

    iBATIS-SqlMaps-2_cn1.pdf

    iBATIS-SqlMaps ibatis入门教程,教你如何做配置ibatis

    ibatis-3-core-3.0.0.242.jar.zip

    ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip

    iBATIS-SqlMaps-2_cn.pdf

    《iBATIS-SqlMaps-2_cn.pdf》是关于iBATIS SQL Maps的中文版文档,它详尽地阐述了如何使用SQL Maps来构建数据库驱动的Java应用。iBATIS是一个开源的Java库,它的核心功能是简化Java应用程序与数据库之间的交互,尤其...

    iBATIS-SqlMaps-2 PDF文档资料中文

    1. **安装与配置**:介绍如何将iBATIS-SqlMaps-2集成到Java项目中,包括添加依赖、配置数据源以及设置SqlMapConfig.xml文件。 2. **SqlMap设计**:讲解SqlMap XML文件的结构和元素,如`<sql>`、`<select>`、`...

    ibatis-3-core-3.0.0.242.zip

    ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip

    ibatis-3-core-3.0.0.200

    ibatis-3-core-3.0.0.200

    iBATIS-SqlMaps-2_cn.rar

    1. 下载说明.HTM:这可能是一个包含下载和安装指南的HTML文档,详细说明了如何获取、解压和使用iBATIS-SqlMaps-2_cn的相关资料。 2. iBATIS-SqlMaps-2_cn.pdf:这个PDF文件很可能包含iBATIS SqlMaps 2.0的中文版...

    iBATIS-SqlMaps-2_ja.pdf

    ### iBATIS-SqlMaps-2_ja.pdf 相关知识点 #### iBATIS Data Mapper 概览 iBATIS Data Mapper(也称为 SQL Maps)是一个开源框架,它旨在简化与关系数据库交互所需的 Java 代码量。通过使用简单的 XML 配置文件,...

    iBATIS-SqlMaps-中文教程

    《iBATIS-SqlMaps-中文教程》是一个深入解析iBATIS框架的资源,适合对Java Web开发感兴趣的初学者和进阶者。iBATIS是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,简化...

    ibatis-SqlMaps-开发指南-version 1.0 及 ibatis-SqlMaps-开发指南-version 2

    《iBATIS-SqlMaps-开发指南》是针对iBATIS框架的重要参考资料,分为version 1.0和version 2两个版本。iBATIS是一个Java编程语言中的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了数据访问的灵活性和效率...

    iBATIS框架源码剖析-任钢

    1. **动态SQL**:iBATIS的一大亮点是它的动态SQL功能。通过在XML映射文件中使用条件语句(如`if`, `where`, `choose`, `when`, `otherwise`等),开发者可以根据需要动态构建SQL查询,避免了在Java代码中拼接SQL字符...

    ibatis2-dao-2.1.6.589.jar

    ibatis2-dao-2.1.6.589.jar文件,ibatis实现控制层

Global site tag (gtag.js) - Google Analytics