发现老师源代码中的一处bug,哈哈
来源:11-6 引入缓存技术之编码实现下
抽象汪
2020-03-12
首先ShopCategoryService实现类中,getShopCategoryList()这个方法没有添加事务管理器;其次,这个方法的返回值应该是shopCategoryList这个从缓存或数据库中读取到的值,而不是调用dao层方法从数据库中获取。
写回答
1回答
-
翔仔
2020-03-13
同学好,"getShopCategoryList()这个方法没有添加事务管理器" 读操作不需要添加事务呢,事务只是针对数据库层面的:)
另外一个,确实是的,应该是直接return shopCategoryList,否则会执行从dao也就是从数据库返回数据的操作,感谢同学的指正:)
@Override public List<ShopCategory> getShopCategoryList(ShopCategory shopCategoryCondition) { // 定义redis的key前缀 String key = SCLISTKEY; // 定义接收对象 List<ShopCategory> shopCategoryList = null; // 定义jackson数据转换操作类 ObjectMapper mapper = new ObjectMapper(); // 拼接出redis的key if (shopCategoryCondition == null) { // 若查询条件为空,则列出所有首页大类,即parentId为空的店铺类别 key = key + "_allfirstlevel"; } else if (shopCategoryCondition != null && shopCategoryCondition.getParent() != null && shopCategoryCondition.getParent().getShopCategoryId() != null) { // 若parentId为非空,则列出该parentId下的所有子类别 key = key + "_parent" + shopCategoryCondition.getParent().getShopCategoryId(); } else if (shopCategoryCondition != null) { // 列出所有子类别,不管其属于哪个类,都列出来 key = key + "_allsecondlevel"; } // 判断key是否存在 if (!jedisKeys.exists(key)) { // 若不存在,则从数据库里面取出相应数据 shopCategoryList = shopCategoryDao.queryShopCategory(shopCategoryCondition); // 将相关的实体类集合转换成string,存入redis里面对应的key中 String jsonString; try { jsonString = mapper.writeValueAsString(shopCategoryList); } catch (JsonProcessingException e) { e.printStackTrace(); logger.error(e.getMessage()); throw new ShopCategoryOperationException(e.getMessage()); } jedisStrings.set(key, jsonString); } else { // 若存在,则直接从redis里面取出相应数据 String jsonString = jedisStrings.get(key); // 指定要将string转换成的集合类型 JavaType javaType = mapper.getTypeFactory().constructParametricType(ArrayList.class, ShopCategory.class); try { // 将相关key对应的value里的的string转换成对象的实体类集合 shopCategoryList = mapper.readValue(jsonString, javaType); } catch (JsonParseException e) { e.printStackTrace(); logger.error(e.getMessage()); throw new ShopCategoryOperationException(e.getMessage()); } catch (JsonMappingException e) { e.printStackTrace(); logger.error(e.getMessage()); throw new ShopCategoryOperationException(e.getMessage()); } catch (IOException e) { e.printStackTrace(); logger.error(e.getMessage()); throw new ShopCategoryOperationException(e.getMessage()); } } return shopCategoryDao.queryShopCategory(shopCategoryCondition); }
00
相似问题