问题描述
- 请教一下,代码优化问题,急在线等
-
@RequestMapping(value = { "/getaddressmg" }) public ModelAndView getAddressMg(HttpServletRequest request, Model model) { ModelAndView view = this.getBaseModelAndView("custom/addressmg/addressmg"); try { CustomInfoBean cb = this.getCurrentUser(); String customerId = cb.getCustomerId(); CusAddr cusAddr = new CusAddr(); cusAddr.setCustomerId(customerId); // 获得用户的信息地址 List<CusAddr> cusAddrList = cusAddrService.getAddrListByNotNUll(cusAddr); if (null != cusAddrList) { for (CusAddr cus : cusAddrList) { //获取省的信息 String provinceId = cus.getProvinceId(); if (StringUtils.isNotBlank(provinceId)) { Region regionProvince = new Region(); if((Constant.REGION_SOURCE_JD).equalsIgnoreCase(cus.getSource())){ regionProvince = regionService.getRegionBySourceregid(cus.getProvinceId(), Constant.REGION_SOURCE_JD); }else if((Constant.REGION_SOURCE_STB).equalsIgnoreCase(cus.getSource())){ regionProvince = regionService.getRegionBySourceregid(cus.getProvinceId(), Constant.REGION_SOURCE_STB); }else{ regionProvince = regionService.getRegionById(cus.getProvinceId()); } if(null == regionProvince){ continue; }; cus.setProvinceName(regionProvince.getRegionName()); } //获取市的信息 String cityId = cus.getCityId(); if (StringUtils.isNotBlank(cityId)) { Region regionCity = regionService.getRegionById(cityId); //Region regionCity = new Region(); if((Constant.REGION_SOURCE_JD).equalsIgnoreCase(cus.getSource())){ regionCity = regionService.getRegionBySourceregid(cus.getCityId(), Constant.REGION_SOURCE_JD); }else if((Constant.REGION_SOURCE_STB).equalsIgnoreCase(cus.getSource())){ regionCity = regionService.getRegionBySourceregid(cus.getCityId(), Constant.REGION_SOURCE_STB); }else{ regionCity = regionService.getRegionById(cus.getCityId()); } if(null == regionCity){ continue; } cus.setCityName(regionCity.getRegionName()); } //获取区的信息 String districtId = cus.getDistrictId(); if (StringUtils.isNotBlank(districtId)) { Region regionDistrict = regionService.getRegionById(districtId); //Region regionDistrict = new Region(); if((Constant.REGION_SOURCE_JD).equalsIgnoreCase(cus.getSource())){ regionDistrict = regionService.getRegionBySourceregid(cus.getDistrictId(), Constant.REGION_SOURCE_JD); }else if((Constant.REGION_SOURCE_STB).equalsIgnoreCase(cus.getSource())){ regionDistrict = regionService.getRegionBySourceregid(cus.getDistrictId(), Constant.REGION_SOURCE_STB); }else{ regionDistrict = regionService.getRegionById(cus.getDistrictId()); } if(null == regionDistrict){ continue; } cus.setDistrictName(regionDistrict.getRegionName()); } //获取县的信息 String tradId = cus.getTradId(); if (StringUtils.isNotBlank(tradId)) { Region regionTrading = regionService.getRegionById(tradId); if((Constant.REGION_SOURCE_JD).equalsIgnoreCase(cus.getSource())){ regionTrading = regionService.getRegionBySourceregid(cus.getTradId(), Constant.REGION_SOURCE_JD); }else if((Constant.REGION_SOURCE_STB).equalsIgnoreCase(cus.getSource())){ regionTrading = regionService.getRegionBySourceregid(cus.getTradId(), Constant.REGION_SOURCE_STB); }else{ regionTrading = regionService.getRegionById(cus.getTradId()); } if(null == regionTrading){ continue; } cus.setTradingName(regionTrading.getRegionName()); } } } //获取商家信息 view.addObject("cuslist", cusAddrList); } catch (BusinessException be) { logger.error("查看地址失败", be); this.forwordErrorPage(model, be.getMessage()); } catch (Exception ex) { logger.error("查看地址失败", ex); this.forwordErrorPage(model, ExceptionMsg.getSystemErrorMsg()); } return view; }
领导说for循环中尽量不要请求数据库,应该怎么改一下
解决方案
说一下自己的看法:
1.控制层还是尽量不要写逻辑,应该一到Service层去;
2.你这个for循环里面的查询数据库是每次只查一条,查询多次,那为什么不用一条查询语句全部查出来呢。
3.还有就是可以用冗余字段的方法来尽量减少查询数据库的次数,比如你可以把那些个地址中经常需要查询的,直接加到user对应的表里面去,缺点是需要更改表结构,还需要用到mq。。。
时间: 2024-08-06 19:45:49