Spring Cacheable注解不缓存null值

@SuppressWarnings("unchecked")
	@Cacheable(value = "people", key="#person.id",condition = "#p0.id.equals(\"1\")")//操作成功 进行缓存
    public ResultBean cacheCondition(Person person) {
    	System.out.println("读取数据库"+person.getId());
    	return new ResultBean(person).success();
    }
    
    //map的value为“”或者null时不缓存
    /**
     * Property or field 'value' cannot be found on object of type 'java.util.HashMap' - maybe not public
     *作者 : iechenyb
*方法描述: 说点啥
*创建时间: 2017年7月15日hj12 *@param isNull *@return *#result.value == null or #result.value == \"\" 报异常,无value属性 *可以在result上新增一个标记 表示当data=null或者data=""的状态 然后根据状态值进行 ||与or都行 */ @Cacheable(value = "people",unless = "#result.get(\"value\") == null || #result.get(\"value\") == \"\" || #result.get(\"value\").size()==0")//操作成功 进行缓存 public Map cacheMapCondition(String isNull) {//****** Map data = new HashMap(); if("1".equals(isNull)){ data.put("value", null); }else if("2".equals(isNull)){ data.put("value", ""); }else if("3".equals(isNull)){ data.put("value", new ArrayList<>());//成功缓存 }else if("4".equals(isNull)){ data.put("value", new LinkedHashMap<>());//成功缓存 }else{ data.put("value", "chenyb");//没有size方法 报错 一般情况下 是知道方法的类型的!!! } System.out.println("如果不为空,则缓存,否则每次都查询数据库!"); return data; } //unless 满足的条件是 不缓存 @Cacheable(value = "people",unless = "#result.cacheable == false")//操作成功 进行缓存******* public ResultBean cacheRSBeanCondition(String isNull) { ResultBean data = new ResultBean<>(); if("1".equals(isNull)){ data.data(null); data.cacheable(false); }else if("2".equals(isNull)){ data.data(""); data.cacheable(false); }else{ data.data("chenyb"); data.cacheable(); } System.out.println("如果不为空,则缓存,否则每次都查询数据库!"); return data; }

ps:此处需要注意返回值为list集合等等的话,如果需要判断当且仅当返回的集合不为空的时候才缓存到redis等第三方缓存中去的话,需要判断result不等于null且result的size大于0的时候才满足条件。因为spring+mybatis实测
直接从mapper返回的list是一个没有内容、size为0的对象,也就是[],不为null

你可能感兴趣的:(spring)