⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbocache.java

📁  EasyDBO是一个超轻量级对象-关系映射(Object/Relation Mapping
💻 JAVA
字号:
package com.easyjf.dbo;

import com.easyjf.cache.*;

import java.util.*;

import org.apache.log4j.Logger;
/**
 * 
 * <p>
 * Title: EasyDBO的缓存处理类
 * </p>
 * 
 * <p>
 * Description: 负责与EasyCache打交道,访问缓存数据,生成cache的key等
 * </p>
 * 
 * <p>
 * Copyright: Copyright (c) 2006
 * </p>
 * 
 * <p>
 * Company: EasyJF开源团队-EasyDBO项目组
 * </p>
 * 
 * @author 大峡、piginzoo
 * @version 1.0
 */
 public class DboCache {
	 private final static Logger logger = Logger.getLogger(DboCache.class);
	private  ICache cache;
	private String cacheName;
	public DboCache()
	{
		
	}
	public DboCache(String cacheName)
	{
		this.cacheName=cacheName;
	}
	/**
	 * 增加缓存对象
	 * 
	 * @param key
	 *            String
	 * @param obj
	 *            Object
	 */
	private void addCacheObj(String key, Object obj) {
		if (cache == null) {
			initCache();
		}	
		if (cache != null) {
			try {
				cache.put(key, obj);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 清除与某个表相关连的所有缓存对象
	 * 
	 * @param tableName
	 *            String
	 * @param cid
	 *            Object
	 */
	public  void clearRelativeKey(String tableName, Object cid) {
		String s = tableName + ":" + cid;
		List list = new ArrayList();
		Iterator it = cache.getKeySet().iterator();

		while (it.hasNext()) {
			String key = (String) it.next();

			if (key.endsWith(":" + s)) {
				list.add(key);
			}
		}

		if (list != null) {
			for (int i = 0; i < list.size(); i++) {
				try {
					cache.remove(list.get(i));
				} catch (Exception e) {
				}
			}
		}
	}

	/**
	 * 私有类调用缓存处理
	 * 
	 * @param key
	 *            String
	 * @return Object
	 */
	private  Object findCacheObj(String key) {
		if (cache == null) {
			initCache();//初始化Cache
		}

		Object ret = null;
		
		if (cache != null) {
			try {
				ret = cache.get(key);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return ret;
	}

	/**
	 * 初始化缓存
	 */
	private  void initCache() {
		try{		
		cache = CacheManager.getInstance().getCache(cacheName);		
		}
		catch(EasyDBOException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * 根据sql语句生成key,并往缓存中放置对象
	 * 
	 * @param sql
	 *            String SQL语句
	 * @param obj
	 *            Object 缓存对象
	 */
	public  void put(String sql, Object obj) {
		String key = getKey(sql);

		addCacheObj(key, obj);
	}

	/**
	 * 根据类cls及对象标识id生成key,并往缓存中放置对象
	 * 
	 * @param cls
	 *            Class
	 * @param id
	 *            Object
	 * @param obj
	 *            Object
	 */
	public  void put(Class cls, Object id, Object obj) {
		String key = getKey(cls, id);

		addCacheObj(key, obj);
	}

	/**
	 * 根据类cls及查询sql语句生成key,并往缓存中放置对象
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @param obj
	 *            Object
	 */
	public  void put(Class cls, String sql, Object obj) {
		String key = getKey(cls, sql);

		addCacheObj(key, obj);
	}

	/**
	 * 根据sql语句及参数值paras生成key,并往缓存中放置对象
	 * 
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param obj
	 *            Object
	 */
	public  void put(String sql, Collection paras, Object obj) {
		String key = getKey(sql, paras);

		addCacheObj(key, obj);
	}

	/**
	 * 
	 * 根据类cls、sql语句及参数值paras生成key,并往缓存中放置对象
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param obj
	 *            Object
	 */
	public  void put(Class cls, String sql, Collection paras, Object obj) {
		String key = getKey(cls, sql, paras);

		addCacheObj(key, obj);
	}

	/**
	 * 根据类sql语句、参数值paras、记录起始位置begin及记录结束位置max生成key,并往缓存中放置对象
	 * 
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param begin
	 *            int
	 * @param max
	 *            int
	 * @param obj
	 *            Object
	 */
	public void put(String sql, Collection paras, int begin, int max,
			Object obj) {
		String key = getKey(sql, paras, begin, max);

		addCacheObj(key, obj);
	}

	/**
	 * 根据类cls,sql语句、参数值paras、记录起始位置begin及记录结束位置max生成key,并往缓存中放置对象
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param begin
	 *            int
	 * @param max
	 *            int
	 * @param obj
	 *            Object
	 */
	public  void put(Class cls, String sql, Collection paras, int begin,
			int max, Object obj) {
		String key = getKey(cls, sql, paras, begin, max);

		addCacheObj(key, obj);
	}

	/**
	 * 根据key删除缓存中的对象
	 * 
	 * @param key
	 *            String
	 * @return boolean
	 */
	public boolean remove(String key) {
		boolean ret = false;
		try {
			cache.remove(key);
			ret = true;
		} catch (Exception e) {
		}

		return ret;
	}

	/**
	 * 直接删除缓存中的obj对象
	 * 
	 * @param obj
	 *            Object
	 */
	public  void removeElement(Object obj) {
		if(cache!=null)
		{
		cache.removeElement(obj);	
		logger.debug("删除了缓存中的元素"+obj);		
		}
	}

	// ~--- get methods --------------------------------------------------------

	/**
	 * 
	 * @param sql
	 *            String
	 * @return Object
	 */
	public Object get(String sql) {
		String key = getKey(sql);

		return findCacheObj(key);
	}

	/**
	 * 
	 * @param cls
	 *            Class
	 * @param id
	 *            Object
	 * @return Object
	 */
	public  Object get(Class cls, Object id) {
		String key = getKey(cls, id);

		return findCacheObj(key);
	}

	/**
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @return Object
	 */
	public  Object get(Class cls, String sql) {
		String key = getKey(cls, sql);

		return findCacheObj(key);
	}

	/**
	 * 
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @return Object
	 */
	public Object get(String sql, Collection paras) {
		String key = getKey(sql, paras);

		return findCacheObj(key);
	}

	/**
	 * 
	 * 
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param begin
	 *            int
	 * @param max
	 *            int
	 * @return Object
	 */
	public  Object get(String sql, Collection paras, int begin, int max) {
		String key = getKey(sql, paras, begin, max);

		return findCacheObj(key);
	}

	/**
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param begin
	 *            int
	 * @param max
	 *            int
	 * @return Object
	 */
	public  Object get(Class cls, String sql, Collection paras,
			int begin, int max) {
		String key = getKey(cls, sql, paras, begin, max);

		return findCacheObj(key);
	}

	/**
	 * 
	 * @return ICache
	 */
	public  ICache getCache() {
		if (cache == null) {
			initCache();
		}

		 if(cache==null)System.out.println("无法初始化Cache");
		return cache;
	}

	/**
	 * 根据sql语句生成缓存键key
	 * 
	 * @param sql
	 *            String
	 * @return String
	 */
	public  String getKey(String sql) {
		return getKey(sql, null);
	}

	/**
	 * 根据类cls及id生成缓存键key
	 * 
	 * @param cls
	 *            Class
	 * @param id
	 *            Object
	 * @return String
	 */
	public String getKey(Class cls, Object id) {
		String ret = "OBJECT:" + cls.getName() + ":" + id.toString();

		return ret;
	}

	/**
	 * 根据类cls,及sql语句生成缓存键值key
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @return String
	 */
	public String getKey(Class cls, String sql) {
		return getKey(cls, sql, null);
	}

	/**
	 * 
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @return String
	 */
	public  String getKey(String sql, Collection paras) {
		return getKey(sql, paras, 0, 0);
	}

	/**
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @return String
	 */
	public  String getKey(Class cls, String sql, Collection paras) {
		return getKey(cls, sql, paras, 0, 0);
	}

	/**
	 * 
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param begin
	 *            int
	 * @param max
	 *            int
	 * @return String
	 */
	public String getKey(String sql, Collection paras, int begin, int max) {
		String s = "";

		if (paras != null) {
			Iterator it = paras.iterator();

			while (it.hasNext()) {
				s += it.next();
			}
		}

		String ret = "SQL:" + sql + ":PARAS" + s + ":" + begin + ":" + max;

		return ret;
	}

	/**
	 * 
	 * @param cls
	 *            Class
	 * @param sql
	 *            String
	 * @param paras
	 *            Collection
	 * @param begin
	 *            int
	 * @param max
	 *            int
	 * @return String
	 */
	public  String getKey(Class cls, String sql, Collection paras,
			int begin, int max) {
		String s = "";

		if (paras != null) {
			Iterator it = paras.iterator();

			while (it.hasNext()) {
				s += it.next();
			}
		}

		String ret = "CLASS:" + cls.getName() + ":SQL" + sql + ":PARAS" + s
				+ ":" + begin + ":" + max;

		return ret;
	}
	public String getCacheName() {
		return cacheName;
	}
	public void setCacheName(String cacheName) {
		this.cacheName = cacheName;
	}
	public void setCache(ICache cache) {
		this.cache = cache;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -