基于SpringBoot框架的新闻后台管理系统04

新闻后台管理系统4.0

本次项目内容

  • 本次项目开发是在新闻后台管理系统3.0的基础上进行的
  • 本次开发主要是实现新闻的删除功能以及新闻主页

项目开发过程

  • 在实现本次项目内容之前,我们先解决一个问题:在刚刚创建News等实体类时,读者可能都会在实体类的@Table后看到一个idea提出的红色警告,这是因为这个项目没有在idea中连接数据库,idea找不到相对应的表,虽然它并不影响程序的执行,但是看着也是很不爽的,所以这次我们进行下面的操作,把这个东西解决掉。
  1. 点击Database–>点击"+"–>选中"Data Source"–>点击"MySQL"
    在这里插入图片描述
  2. 点击MySQL–>点击"Go to Driver"
    在这里插入图片描述
  3. 如果是已经下载过相应版本的Mysql connector的jar包,就点击"+“找到之前下载的位置,如果读者之前看我写的ssm项目博客,这个位置就在.m2文件夹内;没有下过的读者就直接点击"Download ver. …”。
    在这里插入图片描述
  4. 完成上一步操作后,我们返回之前的页面,填写数据库信息,然后点击"Apply"。
    在这里插入图片描述
  5. idea与数据库连接成功后,我们就进入News类,把鼠标放在有红色警告的字段上,然后点击"Assign Data Sources",然后配置上我们才创建的Data Source。然后就没有红色警告了,我们也不用进入其他实体类重复操作,只需要操作一次就行。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 在NewService接口中新增删除服务
void deleteNews(Long id);
  • 在NewsServiceImpl类中实现删除服务
@Override
public void deleteNews(Long id) {
    newsRepository.deleteById(id);
}
  • 在NewsController类中新增删除功能
@GetMapping("/news/{id}/delete")
public String deleteNews(@PathVariable Long id, RedirectAttributes attributes){
    newsService.deleteNews(id);
    attributes.addFlashAttribute("message","删除成功");
    return REDIRECT_LIST;
}
  • 通过以上操作,已经实现了新闻的删除操作,而再加上之前的开发,我们已经能够在后台管理新闻、类型、标签,大致地实现了新闻后台管理的功能。

  • 接下来我们就需要实现新闻网站的主页,也就是普通用户使用的新闻网页,用户可以在该主页上浏览、查询新闻。

  • 创建util包,util是utiliy的缩写,是一个多功能、基于工具的包。我们通常将需要使用的工具类放到这个包下。

  • 在util包下添加MarkdownUtils.java文件,这个类是专门用来将markdown格式转化为html格式的,我们需要这个类将News中的content漂亮的展示出来,这个文件是网上找的,就直接放链接了
    链接MarkdownUtils.java

  • 在NewsRepository、TypeRepository、TagRepository接口中新增条件查询方法,这些条件查询方法是为了实现新闻主页的显示以及查询功能。

//NewsRepository新增的方法
@Query("select n from News n where n.recommend = true")
List<News> findTop(Pageable pageable);

@Query("select n from News n where n.title like ?1 or n.content like ?1")
Page<News> findByQuery(String query, Pageable pageable);
//TypeRepository新增的方法
@Query("select t from Type t")
List<Type> findTop(Pageable pageable);
//TagRepository新增的方法
@Query("select t from Tag t")
List<Tag> findTop(Pageable pageable);
  • 在NewsService、TypeService、TagService接口中新增条件查询服务
//NewsService新增的方法
//主页显示新闻列表
Page<News> listNews(Pageable pageable);

//主页推荐最新新闻列表
List<News> listRecommendNewsTop(Integer size);

//主页搜索新闻列表
Page<News> listNews(String query, Pageable pageable);

News getAndConvertNews(Long id);
//TypeService新增的方法
List<Type> listTypeTop(Integer size);
//TagService新增的方法
List<Tag> listTagTop(Integer size);
  • 在NewsServiceImpl、TypeServiceImpl、TagSeriveImpl类中实现新增的条件查询服务
//NewsServiceImpl新增的方法
@Override
public Page<News> listNews(Pageable pageable) {
    return newsRepository.findAll(pageable);
}

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

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

@Override
public News getAndConvertNews(Long id) {
    News news = newsRepository.findById(id).orElse(null);
    if(news == null){
        System.out.println("该新闻不存在");
        return null;
    }
    News news1 = new News();
    BeanUtils.copyProperties(news, news1);
    String content = news1.getContent();
    news1.setContent(MarkdownUtils.markdownToHtmlExtensions(content));
    return news1;
}
//TypeServiceImpl新增的方法
@Override
public List<Type> listTypeTop(Integer size) {
    Sort sort = Sort.by(Sort.Direction.DESC,"newsList.size");
    Pageable pageable = PageRequest.of(0,size,sort);
    return typeRepository.findTop(pageable);
}
//TagServiceImpl新增的方法
@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);
}
  • 在web包下创建indexController,注意indexController和admin包是同级的,indexController主要用来负责处理新闻主页的请求。
@Controller
public class IndexController {

    @Autowired
    private NewsService newsService;

    @Autowired
    private TypeService typeService;

    @Autowired
    private TagService tagService;

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

    @PostMapping("/search")
    public String search(@PageableDefault(size = 5, sort = {"updateTime"}, direction = Sort.Direction.DESC)
                         Pageable pageable, @RequestParam String query, Model model){
        model.addAttribute("page", newsService.listNews("%"+query+"%", pageable));
        model.addAttribute("query", query);
        return "search";
    }

    @RequestMapping("/news/{id}")
    public String news(@PathVariable Long id, Model model){
        model.addAttribute("news", newsService.getAndConvertNews(id));
        return "new";
    }
}
  • 运行程序"
  • 打开浏览器并在网址栏内输入"localhost:8081/admin",这个是新闻后台管理网站,管理员可以在这里面对新闻、类型、标签进行各种操作。
  • 打开浏览器并在网址栏内输入"localhost:8081/",这个是新闻主页,用户可以在这里面浏览、查询新闻。

项目演示

  • 新闻后台管理页面
    在这里插入图片描述

  • 新闻主页
    在这里插入图片描述

  • 新闻详情页面
    在这里插入图片描述

项目下载

链接news4

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值