这个产品包括了安卓和IOS还有web三方面,除了要写后台管理的系统外,还要写移动端的接口。第一次写移动端接口就犯了一个错误,以为和web一样是怎么方便怎么来,然后和移动端人员对接的时候才知道为了程序的高效率最好是一个接口就能展示出整个页面的内容,而我原来写的代码确要移动端人员调用3个接口,查询数据库3次,效率低下。然后移动端人员给了以下数据展示需求:

 

展示hot热门音乐类型集合和recommend推荐音乐类型2个集合的数据,而recommend集合下又包含有music音乐集合的数据,即展示hotList和recommendList{musicList}中的数据。刚开始写的时候我是写一个接口分别通过字段hot和recommend查询hotList和recommendList2个集合的数据,然后另写一个接口查询musicList集合的数据。然后经过和移动端的同事交流和技术经理的指导后修改了接口代码如下:

    @RequestMapping(value = {"getHotRecommend"})
    @ResponseBody
    @RequiresUser(required = false)
    public Result getHotRecommend() {
        //获取热门或者推荐类型
        List<MusicType> hotRecommendList = musicTypeService.selectHotList();

        List<MusicType> recommendList = new ArrayList<MusicType>(); //新建推荐list
        List<MusicType> hotList = new ArrayList<MusicType>();       //新建热门list

        List<MusicType> resultList = new ArrayList<MusicType>();

        if(CollectionUtil.isNotEmpty(hotRecommendList)){
                for(MusicType musicType : hotRecommendList){

                    if(musicType.getRecommend() == 1){
                    recommendList.add(musicType);
                }

                if(musicType.getHot() == 1){
                    hotList.add(musicType);
                }

            }
        }
        if(CollectionUtil.isNotEmpty(recommendList)){
            for(MusicType m : recommendList){
                //拿到id,获取音乐list
                List<HealthMusic> list = healthMusicService.findMusicListByRecommend(m.getId());
                m.setMusicList(list);
                resultList.add(m);
            }
        }

        Map map = new HashMap();
        map.put("hotList",hotList);
        map.put("recommendList",resultList);
        return Result.successResult().setObj(map);
    }

一次查询出hotList和recommendList集合中的数据,经过一次循环把hotList和recommendList分开,比原来少了一次对数据库的骚扰,多了一次循环,在数据量不大的循环效率比较高,至于查询音乐musicList和原来写的差不多,至于更好的写法、更好的优化可以慢慢探讨。

posted on 2018-01-02 10:51  袁子弹  阅读(864)  评论(2)    收藏  举报