天天看点

springboot开发:新闻管理系统的首页及详情页设计

前言

新闻系统的一个重要功能是新闻的浏览,在主页的界面中需要罗列新闻,并在侧栏罗列最热的类型,还要支持新闻的跳转。还上线一个新功能:搜索跳转。

实现过程

新闻展示

这部分无疑需要提取数据库中的全部新闻信息,在展示的时候加上实现分页

@Override
    public Page<News> listNew(Pageable pageable) {
        return newRepository.findAll(pageable);
    }
           
@Controller
public class indexController {

    @Autowired
    private NewService newService;

	@GetMapping("/")
    public String index(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)
                        Pageable pageable, Model model){
        model.addAttribute("page",newService.listNew(pageable));
        return "index";
    }
}

           

分类展示

根据新闻的分类显示相应的新闻,这是常见的功能。首先在typeRepository文件中声明一个查询类型方法,接着将它实现即可。

@Override
public List<Type> listTypeTop(Integer size) {
    Sort sort = Sort.by(Sort.Direction.DESC,"news.size");
    Pageable pageable = PageRequest.of(0,size,sort);
    return typeRepository.findTop(pageable);
}
           
@Controller
public class indexController {

    @Autowired
    private NewService newService;
    @Autowired
    private TypeService typeService;

	@GetMapping("/")
    public String index(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)
                        Pageable pageable, Model model){
        model.addAttribute("page",newService.listNew(pageable));
        model.addAttribute("types",typeService.listTypeTop(3));
        return "index";
    }
}
           

标签展示

标签显示要先在TagRepository下声明一个连接数据库相关数据的方法,再在Service层中声明接口和实现接口方法,添加到controller中,同样按照标签下新闻数量进行排序。这和分类展示是差不多的设计方法

@Override
public List<Tag> listTagTop(Integer size) {
    Sort sort = Sort.by(Sort.Direction.DESC,"newsList.size");
    Pageable pageable = PageRequest.of(0,size,sort);
    return tagRepository.findTop(pageable);
}
           
@Controller
public class indexController {

    @Autowired
    private TypeService typeService;
    @Autowired
    private TagService tagService;
    @Autowired
    private NewService newService;

    @GetMapping("/")
    public String index(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)
                        Pageable pageable, Model model){
        model.addAttribute("page",newService.listNew(pageable));
        model.addAttribute("types",typeService.listTypeTop(3));
        model.addAttribute("tags",tagService.listTagTop(3));       
        return "index";
    }
}
           

搜索新闻展示

在主页的顶部搜索栏中,可以输入标题关键字或者相关内容进行模糊搜索,进而展示相关的内容。

模糊查询的SQL语句如下:

//根据内容或者标题模糊查询
    @Query("select n from News n where n.title like ?1 or n.content like ?1")
    Page<News> findByQuery(String query, Pageable pageable);
           
@PostMapping("/search")
    public String search(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
                         @RequestParam String query,Model model){
        model.addAttribute("page",newService.listNew("%"+query+"%",pageable));
        model.addAttribute("query",query);
        return "search";
    }
           

新闻跳转

根据新闻的ID进行显示新闻,然后跳转到显示的界面进行展示。

@Override
    public News getAndConvert(Long id) {
        News news = newRepository.findById(id).orElse(null);
        if(news==null){
            System.out.println("该新闻不存在");
        }
        News news1 = new News();
        BeanUtils.copyProperties(news,news1);
        String content = news1.getContent();
        news1.setContent(MarkdownUtils.markdownToHtmlExtensions(content));
        return news1;
    }
           
@RequestMapping("/news/{id}")
    public String news(@PathVariable Long id,Model model){
        News news = newService.getAndConvert(id);
        model.addAttribute("news",news);
        return "new";
    }
           

展示新闻详情的界面主要是要与前端进行同一,具体的内容会根据新闻的不一样而产生不一样的效果,布局方面的问题应该是在设计时进行统一,在页面接收到各种参数时进行现实。

总结

这一部分的内容难在参数的传递,在选择新闻的时候,不需要对参数进行过多的操作,需要的是将各种的信息进行配置,同时,模糊查询、标签的罗列以及分类的统计这些也要对数据库进行操作。