spring boot练习

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot练习相关的知识,希望对你有一定的参考价值。

B站教程地址
有点古老
代码基本上跟着敲完了,但是还得啃好久的感觉

功能概述

一、主页展示

前端thyemleaf获取数据库数据对页面进行渲染

th:text="|${blog.description}......|"
th:text="${page.totalElements}"

实体类的方法对数据库的数据进行处理

二、文章标签

同样利用数据库的数据通过thyemleaf在前端渲染


标签等可以在后台进行添加删除等
修改标签-保存修改

 @PostMapping("/Mtag/{id}")
    public String editPost(@Valid Tag tag, BindingResult result,
                           @PathVariable Long id, RedirectAttributes attributes){
        Tag tag1 = tagService.getTagByName(tag.getName());
        if (tag1 != null){
            result.rejectValue("name","nameError","该标签已存在");
        }
        if (result.hasErrors()){
            return "admin/Rtag";
        }
        Tag t = tagService.updateTag(id,tag);
        if (t==null){
            attributes.addFlashAttribute("message","更新失败");
        }else {
            attributes.addFlashAttribute("message","更新成功");
        }
        return "redirect:/admin/Mtag";
    }

删除标签

  @GetMapping("/Mtag/{id}/delete")
    public String delete(@PathVariable Long id,RedirectAttributes attributes){
        tagService.deleteTag(id);
        attributes.addFlashAttribute("message","删除成功");
        return "redirect:/admin/Mtag";
    }

添加标签

@PostMapping("/Mtag")
public String post(@Valid Tag tag,BindingResult result, RedirectAttributes attributes){
    Tag tag1 = tagService.getTagByName(tag.getName());
    if (tag1 != null){
        result.rejectValue("name","nameError","该标签已存在");
    }
    if (result.hasErrors()){
        return "admin/Rtag";
    }
    Tag t = tagService.saveTag(tag);
    if (t==null){
        attributes.addFlashAttribute("message","新增失败");
    }else {
        attributes.addFlashAttribute("message","新增成功");
    }
    return "redirect:/admin/Mtag";
}

三、文章分类

和上面↑标签的相似度高达99.99%

四、日期归档


博客数仓

实体类中调用数仓的数据查询

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

@Override
public Map<String, List<Blog>> archiveBlog() {
    List<String> years = blogRepository.findGroupYear();
    Map<String, List<Blog>> map = new HashMap<>();
    for (String year : years){
        map.put(year,blogRepository.findByYear(year));
    }
    return map;
}

@Override
public Long countBlog() {
    return blogRepository.count();
}

前端数据渲染

th:text="${blogCount}"
th:each="item : ${archiveMap}"
th:text="${item.key}"
th:text="${blog.title}"
th:each="blog : ${item.value}"
th:text="${#dates.format(blog.updateTime,'MM月dd')}"

就是简单的获取数据库中文章时间,然后根据时间进行排序,并且显示文章发布时的版权

五、博客编辑/保存/发布

后台的数据处理


在这里集成了MarkDown的文本编辑器插件
新增

@Override
public Blog saveBlog(Blog blog) {

    if (blog.getId()==null){
        blog.setCreateTime(new Date());
        blog.setUpdateTime(new Date());
        blog.setViews(0);
    }else {
        blog.setUpdateTime(new Date());
    }
    return blogRepository.save(blog);
}

修改

@Override
public Blog updateBlog(Long id, Blog blog) {
    Blog b = blogRepository.findById(id).get();
    if (b == null) {
        throw new NotFoundException("该博客不存在");
    }
    BeanUtils.copyProperties(blog,b, MyBeanUtils.getNullPropertyNames(blog));
    b.setUpdateTime(new Date());
    return blogRepository.save(b);
}

删除

@Override
public void deleteBlog(Long id) {
    blogRepository.deleteById(id);
}

博客这部分的代码是最复杂的,还没弄懂…再继续看看…

六、文章搜索


关键字查询,道理很简单,数据库中博客有匹配的相同字段,就获取该博客的数据然后显示到前端页面中,和归档、博客原理大同小异…不贴代码了这里

以上是关于spring boot练习的主要内容,如果未能解决你的问题,请参考以下文章

spring boot练习

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式