上一个
下一个

SpringBoot与vue做的博客后台

0.前言

大概用了十天左右写完——不过也就是按照教程一步步往下做的那种难度而已。但是不得不说,教程中的坑还是特别多的,SpringgBoot3会有乱七八糟奇形怪状的问题,一报错那就是排山倒海的错误,让人根本摸不着头脑,所以最后换成了SpringBoot2。

不过因为我那三脚猫的vue技术学的是vue3,这个项目用的是vue2,在做之前我大概了解了一下,区别不是特别大,我就想既然不大,那我就用vue3好了。结果确实不是很大,但是中形形色色的坑还是踩了不少,印象最深的一个坑是关于axios同步和异步的问题,具体表现就是明明控制台里清清楚楚的打印了出来后端返回的信息,前端就是获取不到,哪怕就是在上一行它还打印了出来,下一行就不见了。

最后使用async/await同步化后才解决的。就这个bug,我痛苦地查了大概一下午,其他基本都是一些小问题。

包括数据库方面的一些坑也踩了不少,不过好在十分简单,边做边学还是解决了。

1.成果分享

登录界面
后台首页
文章管理
写博客功能
分类管理
标签管理
评论管理
友链管理
数据库后台

2.部分代码

大多数都大同小异,(除了博客id和评论id还有二级评论查询那一块没看懂是照抄的),记录一段更新博客对于标签的处理。

因为博客的标签有很多个,所以这肯定是个一对多的查询,原来教程的逻辑是这样的:先查询这个博客所有相关tag,然后把这些tag全删除,再根据前端传回的新tag组插入一对一的关系表。

但问题是有可能这个tag别的博客也在用啊,所以就会出现别的博客使用的tag忽然被这篇博客误删了。所以我把它改成不主动删除标签,只删除那些blog_id:tag_id的那张表里的数据。

但是这又会出现同一个标签被多次添加的问题,所以在删除前在查询一下是否已经存在。

				
					@Override
    public Result updateBlog(HashMap<String, Object> params) {
        Result result = Result.build();
        //根据id查询文章
        Blog tBlog = tBlogMapper.selectById(Long.parseLong(params.get("id").toString()));
        tBlog.setTitle((String) params.get("title"));
        tBlog.setDescription((String) params.get("description"));
        tBlog.setFirstPicture((String) params.get("first_picture"));
        tBlog.setContent((String) params.get("content"));
        tBlog.setTypeId(Long.parseLong(params.get("type_id").toString()));
        tBlog.setFlag((String) params.get("flag"));
        tBlog.setPublished(Boolean.valueOf(params.get("published").toString()));
        tBlog.setShareStatement(Boolean.valueOf(params.get("shareStatement").toString()) || Objects.equals(params.get("shareStatement").toString(), "发布"));
        tBlog.setUpdateTime(LocalDateTime.now());

        //更新文章
        int result_blog = tBlogMapper.updateById(tBlog);

        int result_tag = 0;
        int resule_bt = 0;
        //在重新建立标签和博客的对应前,要先删除原来的
        //先删除与这篇文章相关的标签和中间表记录
        QueryWrapper<BlogTags> queryWrapper1 = new QueryWrapper<BlogTags>();
        QueryWrapper<Tag> queryWrapper2 = new QueryWrapper<Tag>();
        queryWrapper1.eq("blogs_id",tBlog.getId());
        List<BlogTags> blogTagsList =  blogTagsMapper.selectList(queryWrapper1);
        List<Tag> id = tagMapper.selectList(queryWrapper2);
        for (BlogTags bt : blogTagsList) {
             //删除博客标签关联表的数据
            QueryWrapper<BlogTags> queryWrapper = new QueryWrapper<BlogTags>();
            queryWrapper.eq("tags_id",bt.getTagsId());
            queryWrapper.eq("blogs_id",tBlog.getId());
            //再删除博客标签关联表的数据
            blogTagsMapper.delete(queryWrapper);
        }
        //然后再重新添加标签
        List<String> tags = (List) params.get("tags");
        for (String tag : tags) {
            //保存标签
            Tag tTag = new Tag();
            tTag.setName(tag);

            BlogTags tBlogTags = new BlogTags();

            Tag search = tagMapper.loadTagByTagname(tag);
            if(search==null) {
                result_tag = tagMapper.insert(tTag);
                tBlogTags.setTagsId(tTag.getId());
            }
            else{
                tBlogTags.setTagsId(search.getId());
                result_tag = 1;
            }
            //保存中间表记录
            tBlogTags.setBlogsId(tBlog.getId());
            resule_bt = blogTagsMapper.insert(tBlogTags);
        }
        if (result_blog != 0 && result_tag != 0 && resule_bt !=0){
            result.setCode(200);
            result.setMsg("更新博客成功!");
            return result;
        }
        result.setMsg("更新博客失败");
        return result;
    }
				
			

3.近来随想

希望常温超导体是真的,感觉互联网已经很难卷下去了,学web似乎没什么前途,不过本科就想就业好像还是得学一点。啧,错过了好时候啊。

等一下,要是常温超导体是真的了,那我们学计算机的不会是49年入国军的吧?

不过还是希望是真的,计算机毕竟工科,想要喝口汤应该还是不难的吧,而且好在计算机科学与技术还有点偏硬件的东西。

订阅评论
提醒
3 评论
最旧
最新 最多投票
内联反馈
查看所有评论
1 年 前

如果常温超导体是真的,不是利好软件方向吗

一寄
1 年 前

静观其变😎

《SpringBoot与vue做的博客后台》

3
0
希望看到您的想法,请您发表评论x