
com.jeesuite.mybatis.plugin.cache.EntityCacheHelper Maven / Gradle / Ivy
/**
*
*/
package com.jeesuite.mybatis.plugin.cache;
import java.util.concurrent.Callable;
import com.jeesuite.mybatis.core.BaseEntity;
/**
* 实体缓存辅助工具(关联自动缓存内容)
*
通过该工具的缓存会自动缓存更新
* @description
* @author vakin
* @date 2016年11月19日
*/
public class EntityCacheHelper {
/**
* 查询并缓存结果(默认缓存一天)
* @param entityClass 实体类class (用户组装实际的缓存key)
* @param key 缓存的key(和entityClass一起组成真实的缓存key。
如entityClass=UserEntity.class,key=findlist,实际的key为:UserEntity.findlist)
* @param dataCaller 缓存不存在数据加载源
* @return
*/
public static T queryTryCache(Class extends BaseEntity> entityClass,String key,Callable dataCaller){
return queryTryCache(entityClass, key, CacheExpires.IN_1DAY, dataCaller);
}
/**
* 查询并缓存结果
* @param entityClass 实体类class (用户组装实际的缓存key)
* @param key 缓存的key(和entityClass一起组成真实的缓存key。
如entityClass=UserEntity.class,key=findlist,实际的key为:UserEntity.findlist)
* @param expireSeconds 过期时间,单位:秒
* @param dataCaller 缓存不存在数据加载源
* @return
*/
public static T queryTryCache(Class extends BaseEntity> entityClass,String key,long expireSeconds,Callable dataCaller){
String entityClassName = entityClass.getSimpleName();
key = entityClassName + CacheHandler.SPLIT_PONIT + key;
T result = CacheHandler.cacheProvider.get(key);
if(result == null){
try {
result = dataCaller.call();
if(result != null){
CacheHandler.cacheProvider.set(key, result, expireSeconds);
String cacheGroupKey = entityClassName + CacheHandler.GROUPKEY_SUFFIX;
CacheHandler.cacheProvider.putGroupKeys(cacheGroupKey, key, expireSeconds);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return result;
}
/**
* 移除指定实体组所有缓存
* @param entityClass
*/
public static void removeCache(Class extends BaseEntity> entityClass){
String entityClassName = entityClass.getSimpleName();
CacheHandler.cacheProvider.clearGroup(entityClassName);
}
/**
* 移除指定实体组指定key的缓存
* @param entityClass
* @param key
*/
public static void removeCache(Class extends BaseEntity> entityClass,String key){
String entityClassName = entityClass.getSimpleName();
key = entityClassName + CacheHandler.SPLIT_PONIT + key;
String cacheGroupKey = entityClassName + CacheHandler.GROUPKEY_SUFFIX;
CacheHandler.cacheProvider.remove(key);
CacheHandler.cacheProvider.clearGroupKey(cacheGroupKey, key);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy