尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

jcalaBlog 标签系统实现详解:从逗号分隔存储到标签筛选的完整链路

jcalaBlog 标签系统实现详解:从逗号分隔存储到标签筛选的完整链路 jcalaBlog 标签系统实现详解从逗号分隔存储到标签筛选的完整链路【免费下载链接】jcalaBloga personal blog site based on springbootsrpingMVCmybatisvelocitybootstrapmysql项目地址: https://gitcode.com/gh_mirrors/jc/jcalaBlogjcalaBlog 是一个基于 Spring Boot Spring MVC MyBatis Velocity Bootstrap MySQL 的轻量级个人博客系统它的标签系统实现是全文检索之外的另一种文章组织方式。本文将以新手也能看懂的方式带你走一遍 jcalaBlog 标签系统的完整链路从博客文章里逗号分隔存储的原始标签字段到后台自动拆分入库再到前台标签云展示和点击标签后的文章筛选全程没有复杂的框架黑盒代码就摆在你面前。一、标签存储方案为什么用逗号分隔打开数据库初始化脚本 import.sql你会看到标签相关的两张表blog_view表文章主表其中tags字段是varchar(80)直接以逗号分隔的字符串保存全部标签例如spring,springBoot,java,mybatisview_tag表标签关联表只有name标签名和vid文章 id两列主键是(name, vid)并通过外键与文章表级联删除。这种一列存全部标签 一张关联表的设计兼顾了编辑时的直观后台直接填逗号分隔文本和查询时的效率关联表支持distinct去重与按标签反查文章。对应实体类见 BlogView.java其中tags字段的注释明确写着不同标签以,隔开。二、标签写入链路发布文章时标签如何自动入库当你通过后台 BlogCtrl.java 发布或修改文章时标签的处理集中在服务层 BlogSerImpl.java拆分字符串工具类 Tools.java 里的getTagList()使用StringTokenizer按逗号把spring,mybatis拆成独立的标签列表插入文章先执行insertBlog写入文章正文并通过SELECT LAST_INSERT_ID()拿到自增的vid逐条建关联addViewTag()遍历拆分出的每个标签用insert ignore into view_tag写入关联记录ignore关键字可以巧妙避免重复标签的插入。修改文章时走的是updateViewTag()先deleteViewTag清空该文章的旧标签再按新标签重新插入保证标签与文章永远同步。整个过程包在Transactional事务里任何一步失败都会整体回滚不会出现文章保存了但标签丢了的脏数据。三、标签读取链路首页标签云如何展示打开博客首页或标签页你会看到一整套标签集合这背后的读取链路同样清晰。前端控制器 FontEndCtrl.java 的/tags路由会调用blogSer.getTagList()最终落到 MyBatis 的selectTags()方法见 BlogMapper.javaselect distinct name from view_tag一句 SQL 就能把关联表里所有去重后的标签名捞出来交给tags.vm模板渲染成标签云。值得留意的是标签列表通过Cacheable(value tagList)做了缓存而发布、修改、删除文章时服务层又会通过CacheEvict把tagList、archives等缓存一并清掉——保证写完文章立刻能在首页看到新标签的实时一致性。四、标签筛选链路点击标签如何找到文章这是整套标签系统最精彩的一环也是本文的核心。当你点击某个标签时浏览器会访问/tags/{tagName}流程如下按标签查文章 idMapper 的selectVidBytag()执行select distinct vid from view_tag where name #{tag}先拿到该标签关联的所有文章 id逐篇补全信息getBlogByTag()遍历这些 id逐个调用selectTagView()查出文章标题、日期并通过TimeTools.getEdate()格式化成Oct 04这样的友好日期模板渲染最终结果交给 tagView.vm按日期列出该标签下的全部文章链接形成你的专属文章归档页。由于view_tag的vid列建有外键索引fk_vid即使文章数量增长按标签反查的性能也依然稳定。整套标签 → 文章 id → 文章详情的筛选链路全程只有两条简单的 SQL新手也能轻松读懂、按需扩展。五、写在最后从逗号分隔存储到标签云展示再到点击标签后的文章筛选jcalaBlog 用两张表、两条 SQL 和几十行 Java 代码就实现了一套完整且自洽的标签系统。如果你正在学习 Spring Boot MyBatis 的博客开发或者想为自己的博客加上标签功能这套实现非常值得参考。克隆仓库后数据初始化脚本在src/main/resources/import.sql标签核心逻辑集中在BlogSerImpl和BlogMapper两个文件里跟着本文的链路逐行阅读你就能彻底掌握它的设计思路。【免费下载链接】jcalaBloga personal blog site based on springbootsrpingMVCmybatisvelocitybootstrapmysql项目地址: https://gitcode.com/gh_mirrors/jc/jcalaBlog创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表