Java源码示例:com.jeesuite.mybatis.core.BaseEntity

示例1
/**
 * 获取实体的ID泛型
 * @param entityClass
 * @return
 */
private static Class<?> getIdClass(Class<?> entityClass) {
    Type[] genTypes = entityClass.getGenericInterfaces();

    for (int i = 0; i < genTypes.length; i++) {
        Type genType = genTypes[i];
        String s1 = genType.getClass().getName();
        String s2 = BaseEntity.class.getName();
        if (s1.startsWith(s2)) {
            Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
            // ID真实的class
            Class<?> mapperClass = (Class<?>) params[0];
            return mapperClass;
        }
    }

    return null;
}
 
示例2
/**
 * 移除指定实体组指定key的缓存
 * @param entityClass
 * @param key
 */
   public static void removeCache(Class<? extends BaseEntity> entityClass,String key){
   	if(CacheHandler.cacheProvider == null)return;
   	String entityClassName = entityClass.getSimpleName();
	key = entityClassName + CacheHandler.DOT + key;
	CacheHandler.cacheProvider.remove(key);
}
 
示例3
/**
 * 生成查询缓存key
 * @param cacheInfo
 * @param param
 * @return
 */
@SuppressWarnings("unchecked")
private String genarateQueryCacheKey(String keyPattern,Object param){
	String text;
	try {
		Object[] args;
		if(param instanceof Map){
			Map<String, Object> map = (Map<String, Object>) param;
			if(map.containsKey(STR_PARAM + "1")){
				args = new String[map.size()/2];
				for (int i = 0; i < args.length; i++) {
					args[i] = CacheKeyUtils.objcetToString(map.get(STR_PARAM + (i+1)));
				}
			}else{
				args = new String[]{CacheKeyUtils.objcetToString(map)};
			}
		}else if(param instanceof BaseEntity){
			Serializable id = ((BaseEntity)param).getId();
			if(id != null && !"0".equals(id.toString())){	
				args = new String[]{(((BaseEntity)param).getId()).toString()};
			}else{
				args = new String[]{CacheKeyUtils.objcetToString(param)};
			}
		}else if(param instanceof Object[]){
			args = (Object[])param;
		}else if(param == null){
			args = new Object[0];
		}else{
			args = new String[]{CacheKeyUtils.objcetToString(param)};
		}
		
		text = StringUtils.join(args,"-");
	} catch (Exception e) {
		text = JsonUtils.toJson(param);
		e.printStackTrace();
	}
	if(text.length() > 64)text = DigestUtils.md5(text);

	return String.format(keyPattern, text);
}
 
示例4
public static <T extends BaseEntity> void addCache(T bean,int expireSeconds){
	String key = buildCacheKey(bean.getClass(), bean.getId());
	new RedisObject(key).set(bean, expireSeconds);
}
 
示例5
/**
 * 移除指定对象缓存
 * @param bean
 */
public static <T extends BaseEntity> void removeCache(T bean){
	if(CacheHandler.cacheProvider == null)return;
	String key = buildCacheKey(bean.getClass(), bean.getId());
	CacheHandler.cacheProvider.remove(key);
}
 
示例6
/**
 * 移除指定实体组所有缓存
 * @param entityClass
 */
public static void removeCache(Class<? extends BaseEntity> entityClass){
	if(CacheHandler.cacheProvider == null)return;
	String entityClassName = entityClass.getSimpleName();
}
 
示例7
@Override
public void start(JeesuiteMybatisInterceptor context) {
	
	nullValueCache = MybatisConfigs.getBoolean(context.getGroupName(), MybatisConfigs.CACHE_NULL_VALUE, false);
	dynamicCacheTime = MybatisConfigs.getBoolean(context.getGroupName(), MybatisConfigs.CACHE_DYNAMIC_EXPIRE, false);
	defaultCacheExpire = Long.parseLong(MybatisConfigs.getProperty(context.getGroupName(), MybatisConfigs.CACHE_EXPIRE_SECONDS, String.valueOf(IN_1HOUR)));
	logger.info("nullValueCache:{},defaultCacheExpireSeconds:{},dynamicCacheTime:{}",nullValueCache,defaultCacheExpire,dynamicCacheTime);

	List<EntityInfo> entityInfos = MybatisMapperParser.getEntityInfos(context.getGroupName());
	
	Class<BaseEntity> baseEntityClass = BaseEntity.class;
	QueryMethodCache methodCache = null;
	for (EntityInfo ei : entityInfos) {
		if(ei.getMapperClass().isAnnotationPresent(CacheIgnore.class))continue;
		if(!baseEntityClass.isAssignableFrom(ei.getEntityClass())){
			logger.warn("[{}] not extends from [{}],ignore register auto cache!!!!",ei.getEntityClass().getName(),baseEntityClass.getName());
			continue;
		}
		Class<?> mapperClass = ei.getMapperClass();
		
		//按主键查询方法定义
		QueryMethodCache queryByPKMethod = generateQueryByPKMethod(mapperClass, ei.getEntityClass());
		if(queryByPKMethod == null)continue;
		Map<String, QueryMethodCache> tmpMap = new HashMap<>();
		//主键查询方法
		tmpMap.put(queryByPKMethod.methodName, queryByPKMethod);
		
		String keyPatternForPK = queryByPKMethod.keyPattern;
		//接口定义的自动缓存方法
		for (MapperMethod method : ei.getMapperMethods()) {
			if(method.getMethod().isAnnotationPresent(Cache.class)){
				if(tmpMap.containsKey(method.getFullName()))continue;
				methodCache = generateQueryMethodCacheByMethod(ei, method);
				tmpMap.put(method.getFullName(), methodCache);
				logger.info("解析查询方法{}自动缓存配置 ok,keyPattern:[{}]",methodCache.methodName,methodCache.keyPattern);
			}
		}
		//缓存需要自动缓存的mapper
		cacheEnableMappers.add(ei.getMapperClass().getName());
		logger.info("解析查询方法{}自动缓存配置 ok,keyPattern:[{}]",queryByPKMethod.methodName,queryByPKMethod.keyPattern);
		
		queryCacheMethods.put(mapperClass.getName(), tmpMap);
		
		//更新缓存方法
		generateUpdateByPkCacheMethod(mapperClass, ei.getEntityClass(), keyPatternForPK);
	}
	//
	if(queryCacheMethods.isEmpty())return;
	//
	registerClearExpiredKeyTask();
}
 
示例8
/**
 * 查询并缓存结果(默认缓存一天)
 * @param entityClass 实体类class (用户组装实际的缓存key)
 * @param key 缓存的key(和entityClass一起组成真实的缓存key。<br>如entityClass=UserEntity.class,key=findlist,实际的key为:UserEntity.findlist)
 * @param dataCaller 缓存不存在数据加载源
 * @return
 */
public static <T> T queryTryCache(Class<? extends BaseEntity> entityClass,String key,Callable<T> dataCaller){
	return queryTryCache(entityClass, key, CacheHandler.defaultCacheExpire, dataCaller);
}