📄 dbocache.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 + -