springboot专题学习(4)博客的增删改查功能

本文介绍了如何使用SpringBoot框架实现博客的增删改查功能。首先讲解了删除操作,包括在Controller中添加删除方法和在Service层实现删除逻辑。接着,详细阐述了新增博客的过程,包括输入、分类与标签的处理,以及发布功能的实现。最后,讨论了编辑功能,强调了在编辑时需要注意与新增操作的区别,并对相关接口和方法进行了调整。通过这些步骤,成功地实现了完整的博客管理功能。
摘要由CSDN通过智能技术生成

springboot专题学习(4)博客的增删改查功能

前言

暑期线上实训的第十二节课。
项目练习为利用springboot框架实现博客基本功能。
今天的任务是博客增删改查功能的学习与完善。

操作

删除

轻车熟路先找到html中的跳转路径确认一下

<a href="#" th:href="@{/admin/blogs/{id}/delete(id=${blog.id})}" class="ui mini red basic button">删除</a>

在BlogController中新增跳转方法,借鉴前两天的内容,依照传过去的id进行我所希望的删除操作。完成删除操作后重定向回blogs,再执行一次查询操作。

    @GetMapping("{id}/delete")
    public String delete(@PathVariable Long id){
        blogService.deleteById(id);
        return "redirect:/admin/blogs";

    }

alt+enter报红的deleteById生成接口

void deleteById(Long id);

定位到实现类BlogServiceImpl完成删除方法

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

至此,删除功能就应该完成了

新增

input

导入blogs-input.html后,在blogs中找到新增按钮的路径

<a href="#" th:href="@{/admin/blogs/input}" class="ui mini right floated teal basic button">新增</a>

为实现blogs跳转到blogs-input在BlogController中新增代码

    @GetMapping("input")
    public String input(Model model){
        model.addAttribute("blog",new Blog());
        return "admin/blogs-input";
    }

于是就可以跳转到blogs-input界面当中了。

在这里插入图片描述

分类与标签

在blogs-input界面中可以看到不少与数据表t_blog中对应的输入框,但是在‘分类’与‘标签’两部分的输入框中没法实现下拉操作,也无法完成输入操作。

光是通过观察这两部分的名称就显而易见了,这两部分的输入与上两次课当中所涉及到的数据表t_tag和t_type是有关联关系的。所以为了完成这一部分的写入,需要将tag和type相关的数据传到blogs-input界面。
对应的,在BlogController当中将input跳转部分的代码做如下修改:
(传递所有的types表单与tags表单)

    @GetMapping("input")
    public String input(Model model){
        model.addAttribute("blog",new Blog());
        model.addAttribute("types",typeService.listType());
        model.addAttribute("tags",tagService.listType());
        return "admin/blogs-input";
    }

在ITypeService与ITagService的借口当中都新增一行关于List<Tag> listType();的代码,用于传输表单数据给blogs-input

对应实现类中当然也要随之增加代码

    @Override
    public List<Type> listType() {
        return typeDao.findAll();
    }
    @Override
    public List<Tag> listType() {
        return tagDao.findAll();
    }

此时两部分的下拉框功能便实现了
在这里插入图片描述
在这里插入图片描述

发布

接下来着手“发布”按钮功能的实现
找到blogs-input当中,“发布”按钮所在的form表单,修改地址使其跳转到th:action="@{/admin/blogs/add}"

回到BlogController中编写add跳转部分的代码

    @RequestMapping("add")
    public String add(Blog blog){
        return "redirect:/admin/blogs";
    }

ctrl+enter创建方法接口

    void add(Blog blog);

再回到实现类BlogServiceImpl当中完成方法

    @Override
    public void add(Blog blog) {
        blogDao.save(blog);
    }

实际上这个时候已经可以完成发布操作了,只不过在随便填点信息发布后发现与之前数据表中已经存在的数据有所不同
在这里插入图片描述
通过打断点的方式找出了这里回传的参数当中缺少了创建时间、更新时间、flag、user_id和views三项

回到BlogServiceImpl进行修改,添加对应时间的代码

    @Override
    public void add(Blog blog) {
        blog.setCreateTime(new Date());
        blog.setUpdateTime(new Date());
        blogDao.save(blog);
    }

在BlogController稍作修改,把缺少的参数也带上
回传用户id并封装,再取出id传到新增界面,最后通过方法传给数据表

    @RequestMapping("add")
    public String add(Blog blog, HttpSession session){
        User user = (User) session.getAttribute("user");
        blog.setUser(user);
        blogService.add(blog);
        return "redirect:/admin/blogs";
    }

试着测试一下
在这里插入图片描述
实现
在这里插入图片描述

编辑

编辑页和新增页共用input界面,仅仅根据传参不同对应操作有所出入

回到BlogController
介于对数据表进行插入操作时要连同t_blog_tags关系表也一同进行修改,否则在后续的功能实现上会遇到bug,就对add当中一并进行完善了,同时用逻辑区分开共用一个界面的“增加”与“编辑”操作

    @RequestMapping("add")
    public String add(Blog blog, HttpSession session){
        User user = (User) session.getAttribute("user");
        blog.setUser(user);
        String tagIds = blog.getTagIds();
        List<Tag> tagList=tagService.getTagByIds(tagIds);
        blog.setTags(tagList);
        if(blog.getId()==null){
            blogService.add(blog);
        }else {
            blogService.update(blog);
        }

        return "redirect:/admin/blogs";
    }

在blogs.html中新增toUpdate

<a href="#" th:href="@{/admin/blogs/{id}/toUpdate(id=${blog.id})}" class="ui mini teal basic button">编辑</a>

在BlogController中得到blog的id,与上一功能类似,types与tags也是必须的

    @RequestMapping("{id}/toUpdate")
    public String toUpdate(@PathVariable Long id,Model model){
        Blog blog=blogService.getBlog(id);
        blog.initTags(id);
        model.addAttribute("blog",blog);
        model.addAttribute("types",typeService.listType());
        model.addAttribute("tags",tagService.listType());
        return  "admin/blogs-input";
    }

alt+enter报红的getBlog创建方法

Blog getBlog(Long id);

void update(Blog blog);

在实现类BlogServiceImpl中创建

    @Override
    public Blog getBlog(Long id) {
        return blogDao.getOne(id);
    }
    @Override
    public void update(Blog blog) {
        Blog one = blogDao.getOne(blog.getId());
        BeanUtils.copyProperties(one,blog);
        one.setUpdateTime(new Date());
        blogDao.save(one);
    }

在TagServiceImpl中补充上一环节中的getTagByIds,将页面中的的tagIds类型转成List后,根据集合的类型来到数据库当中执行findAllById(ids)操作,查找并回传tags给blog,完成增加操作。

    @Override
    public List<Tag> getTagByIds(String tagIds) {
        List<Long> ids=new ArrayList<>();
        if(tagIds !=null && tagIds != ""){
            String[] s = tagIds.split(",");
            for(int i=0;i<s.length;i++){
                if(!StringUtils.isEmpty(s[i])){
                    ids.add(new Long(s[i]));
                }

            }
        }
        List<Tag> tags = tagDao.findAllById(ids);
        return tags;
    }

测试
在这里插入图片描述
实现
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值