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启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段
一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式
一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式