1.mybatis查询返回map类型取值问题`
Map<Integer, Map<String, Integer>> cameraCount = mntCameraService.getCameraCount();
在得到cameraCount后,想取Map<String, Integer>中的value值
用cameraCount.get(key).get(key);
报java.lang.Long cannot be cast to java.lang.Integer,即第二个get取值时报转换异常
然而我的数据类型都是Integer,并没有long类型,怀疑为mybatis返回的值为long,但map的value
已经定为Integer,既然能封装数据应该不是这个问题。
解决补充:
返回的格式设置为 Map<String,Map<x,x>>,因为返回的格式明显是map类型,所以返回值的value也应该是key
解决
1.使用 Number 类型进行泛型处理(目前使用方法)
Map<Integer, Map<String, Number>> cameraCount = mntCameraService.getCameraCount();
Number count = countInfo.get("xxx");
count.intValue()
2.确定返回的是long类型,那么直接改为long,之后需要再转,我并不确定,也没试试
Map<Integer, Map<String, Long>> cameraCount = mntCameraService.getCameraCount();
3.通用类型转换
Map<Integer, Map<String, Object>> cameraCount = mntCameraService.getCameraCount();
Object countObj = countInfo.get("xxxx");
int count = ((Number) countObj).intValue();
2.RedisTemplate使用
RedisTemplate实际的使用比较少,仅有某些数据是基本不变且固定的,前端又可能反复调用
接口查询回显,故记录使用,以及补充查询如何使用的链接
http://t.csdnimg.cn/nQWfe
http://t.csdnimg.cn/5c4JJ
思路,因为回显的数据不止一条,且有可能有批量删除的情况,而在查询回显的时候又是返回一个集合,所以我选择使用列表(List)存储数据。
1.查询时,先查缓存
//range() 方法的第二个参数是起始索引,这里设为 0 表示从列表的第一个元素开始,
//第三个参数 -1 表示获取到列表的最后一个元素,即获取整个列表的所有元素。
redisTemplate.opsForList().range(key, 0, -1);
2.缓存没有数据,查询数据库并加入缓存
//Long rightPushAll(K key, V value)将 values 列表中的元素从列表的右侧插入到 Redis 中
//指定键 key 的列表中。
redisTemplate.opsForList().rightPushAll(BRAND_KEY, brandList);
3.更新或新增时
//更新前将之前的value移除
redisTemplate.opsForList().remove(BRAND_KEY, 0, value);
//更新或新增后,右侧插入,key 不存在时,自动创建
redisTemplate.opsForList().rightPush(BRAND_KEY, value)
4.删除时
//由于删除时前端只传入id值,如想移除redis中的value的话,还得从数据库中查询出对象来
//加之总体加入缓存的数据量不多,删除操作少。故而选择删掉整个key
redisTemplate.delete(BRAND_KEY);