Java开发学习.Day10

基于Springboot实现 新闻首页和详情功能

本文内容是基于Java开发学习.Day9内容上所实现的


新闻首页

代码实现

该界面主要有新闻分页列表、分类列表、标签列表、推荐列表四个模块。
因此,在代码实现时分别从上述三个方面实现

新闻分页列表

根据分页显示新闻列表
在newService接口中添加方法

    //主页分页展示
    Page<News> listNew(Pageable pageable);

在Impl中实现上述该方法

    @Override
    public Page<News> listNew(Pageable pageable) {
        return newRepository.findAll(pageable);
    }
分类列表

不分页显示分类列表
在dao的TypeRepository中添加新的查询方法

	@Query("select t from Type t")
    List<Type> findTop(Pageable pageable);

在TypeService接口中添加方法

    List<Type> listTypeTop(Integer size);

在Impl中实现上述该方法

    @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);
    }
标签列表

不分页显示标签列表
在dao的TagRepository中添加新的查询方法

    @Query("select t from Tag t")
    List<Tag> findTop(Pageable pageable);

在tagService接口中添加方法

    List<Tag> listTagTop(Integer size);

在Impl中实现上述该方法

    @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);
    }
推荐列表

分页显示推荐列表
在dao的newRepository中添加新的查询方法

    @Query("select  n from  News n where n.recommend = true")
    List<News> findTop(Pageable pageable);

在newService接口中添加方法

    List<News> listRecommendNewTop(Integer size);

在Impl中实现上述该方法

    @Override
    public List<News> listRecommendNewTop(Integer size) {
        Sort sort = Sort.by(Sort.Direction.DESC,"updateTime");
        Pageable pageable = PageRequest.of(0,size,sort);
        return newRepository.findTop(pageable);
    }
添加controller

在IndexController下添加新闻首页的相关代码

@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));
        model.addAttribute("recommendNews",newService.listRecommendNewTop(3));
        return "index";
    }
}

界面效果展示

在这里插入图片描述

新闻查询

代码实现

在NewRepository添加新的查询方式

    @Query("select n from News n where n.title like ?1 or n.content like ?1")
    Page<News> findByQuery(String query, Pageable pageable);

在NewServiece中添加新方法

	Page<News> listNew(String query,Pageable pageable);

在impl中实现

    @Override
    public Page<News> listNew(String query, Pageable pageable) {
        return newRepository.findByQuery(query,pageable);
    }

indexController:

    @PostMapping("/search")
    public String search(@PageableDefault(size = 3,sort = {"updateTime"},direction = Sort.Direction.DESC)Pageable pageable,
                         @RequestParam String query, Model model){
        System.out.println("---------");
        model.addAttribute("page",newService.listNew("%"+query+"%",pageable));
        model.addAttribute("query",query);

        return "search";
    }

界面效果显示

在这里插入图片描述
查询结果:
在这里插入图片描述

新闻跳转

该功能要求点击主页的新闻标题,可以根据新闻id跳转至详情页浏览

代码实现

在NewServiece中添加新方法,根据id查找新闻

	News getAndConvert(Long id);

在impl中实现

    @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;
    }

在indexController中实现页面跳转

    @RequestMapping("/news/{id}")
    public String news(@PathVariable Long id, Model model){
        News news = newService.getAndConvert(id);
        model.addAttribute("news",news);
        return "new";
    }

界面效果展示

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值