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 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 queryWrapper1 = new QueryWrapper();
QueryWrapper queryWrapper2 = new QueryWrapper();
queryWrapper1.eq("blogs_id",tBlog.getId());
List blogTagsList = blogTagsMapper.selectList(queryWrapper1);
List id = tagMapper.selectList(queryWrapper2);
for (BlogTags bt : blogTagsList) {
//删除博客标签关联表的数据
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("tags_id",bt.getTagsId());
queryWrapper.eq("blogs_id",tBlog.getId());
//再删除博客标签关联表的数据
blogTagsMapper.delete(queryWrapper);
}
//然后再重新添加标签
List 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年入国军的吧?
不过还是希望是真的,计算机毕竟工科,想要喝口汤应该还是不难的吧,而且好在计算机科学与技术还有点偏硬件的东西。
如果常温超导体是真的,不是利好软件方向吗
我感觉基建、材料、自动化、还有一切偏硬件需要重新设计电路的行业吃到的福利多,等算力解放的话红利肯定会比较慢
静观其变😎