采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
首先ShopCategoryService实现类中,getShopCategoryList()这个方法没有添加事务管理器;其次,这个方法的返回值应该是shopCategoryList这个从缓存或数据库中读取到的值,而不是调用dao层方法从数据库中获取。
同学好,"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); }
登录后可查看更多问答,登录/注册
SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需
2.3k 47
2.4k 41
3.2k 40
2.4k 39
2.1k 37
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号