书岸在线图书分享社区——基于 SpringBoot+Vue 的读书笔记分享与书评交流平台
一、前言
读屏时代并不缺少书,缺少的是把一本书读完之后「说点什么」的地方。评分网站给出一串冷冰冰的分数,短视频把一本书压缩成三分钟梗概,而真正沉下来读完一本《活着》或者《百年孤独》的人,往往想找一个能完整写下自己想法、也能看到别人完整想法的地方。书岸在线图书分享社区就是沿着这个思路设计实现的:它把「读书笔记分享」作为核心动作,围绕笔记展开评论互动、收藏建单与公告运营,让一本读过的书在社区里继续被讨论。
系统的功能围绕一条主线组织:读者注册登录后,可以把整理好的读书笔记发布到笔记分享区,笔记经管理员审核后对全站展示;其他书友可以浏览、检索、点赞、踩、评论这些笔记,也可以把喜欢的笔记收进自己的收藏书单;读完一本书想聊聊,可以到交流互动区发帖,跟书友围绕某本书、某个话题持续讨论;社区的共读活动、漂流互换、书评精选等运营信息则通过公告信息模块发布。管理员在后台完成用户、笔记审核、公告、轮播图等日常治理工作。
整个系统从需求分析、库表设计到编码实现完整走了一遍,功能闭环、数据真实,适合作为 Java Web 方向的学习与毕业设计参考项目。下面从技术栈、功能设计、数据库设计与系统效果几个方面展开。
二、技术栈与总体架构
系统采用前后端不分离的 SpringBoot 单体架构,技术选型如下:
| 层次 | 技术 |
|---|---|
| 后端框架 | SpringBoot 2.2.2(内嵌 Tomcat,编译目标 Java 8) |
| 持久层 | MyBatis-Plus 2.3 + mybatisplus-spring-boot-starter |
| 权限 | Apache Shiro 1.3.2 + 自定义 Token 拦截器 |
| 数据库 | MySQL 5.7(utf8mb4),HikariCP 连接池 |
| 管理后台 | Vue 2 + Element UI(webpack 构建产物随包提供) |
| 前台页面 | Layui + Bootstrap + jQuery + Vue 渐进式交互 |
| 工具组件 | FastJSON、Hutool、Commons-IO、Apache POI(导入导出) |
后端按照经典的分层结构组织:controller 负责暴露 REST 风格接口,service/service.impl 承担业务逻辑,dao 继承 MyBatis-Plus 的通用 Mapper,entity/model/view/vo 分别承载持久化实体、视图对象与值对象,mapper 目录存放复杂的 SQL 映射。通用能力做了统一抽取:文件上传下载集中在 FileController,登录令牌的签发与校验集中在 TokenService,自定义注解 IgnoreAuth 配合 AuthorizationInterceptor 实现「默认全部拦截、注解放行」的鉴权模型——静态资源与公开列表接口放行,写操作与个人中心数据必须携带 Token。
前台与管理后台共用同一套后端接口。前台使用 Layui 组织页面骨架,jQuery 完成请求封装,Vue 负责列表与详情的数据绑定;管理后台则是标准的 Vue 单页应用,菜单按角色动态渲染,管理员与普通用户登录后看到的模块集合不同。这种「一套接口、两种前端」的结构在中小型社区类系统里非常实用,也便于毕业设计答辩时分层讲解。
三、功能设计
系统包含三类角色:游客、注册用户(前台)与管理员(后台)。
笔记分享(核心模块)。用户撰写读书笔记,填写笔记名称、笔记类型、笔记标签、封面图片与正文,发布后进入待审核状态;管理员在后台逐条审核,给出审核意见,通过后笔记对全站可见。列表页支持按笔记名称、类型、标签多条件检索,首页聚合最新的笔记形成信息流;详情页展示笔记的完整信息,并提供点赞、踩与评论入口,作者可以在评论区回复书友的提问。
评论互动。围绕笔记的评论独立成表,支持「书友评论 + 作者回复」的两层结构,评论区沉淀了围绕一本书的多角度讨论,这也是读书社区区别于普通资讯站的关键气质。
个人笔记与收藏书单。个人笔记是用户的个人草稿本,阅读过程中随手记录的摘抄与待整理的观点先存在这里,成稿后再发布到分享区;收藏模块则把全站笔记按用户维度组织成个人书单,收藏列表按时间倒序呈现,方便重读时快速找回。
交流互动。标准的社区论坛形态:用户发布主题帖,其他用户在帖子下回帖;帖子带「开放/关闭」状态与发布人信息,交流区经常沉淀出「读书笔记该记什么」「旧书漂流互换」这类高质量讨论楼。
公告信息与运营位。管理员发布图文公告,用于发布共读计划、笔记规范、漂流规则与书评精选;首页轮播图由后台可配置,承担社区活动的曝光位。
后台管理。管理员对用户、笔记(含审核)、个人笔记、评论、帖子、公告、轮播图、管理员账号进行全量维护,列表均带分页与条件查询,关键操作有二次确认。
登录态与接口防护。前后台共用一套基于 Token 的鉴权机制:登录成功后由服务端签发随机令牌并写入 token 表,此后每次请求在请求头携带令牌,拦截器验令牌、取用户身份并向请求上下文注入用户 id 与角色;令牌带过期时间,过期后重新登录即可换取新令牌。相比传统 Session 方案,这套机制对前后台两种前端一视同仁,也让接口天然具备了被小程序等第三端复用的能力。
四、数据库设计
数据库 shuan_bookshare 共 10 张表,围绕「用户—笔记—互动—运营」四条线展开:
| 表名 | 说明 | 关键字段 |
|---|---|---|
| yonghu | 前台用户 | 用户名、密码、姓名、性别、头像、手机、邮箱、兴趣标签 |
| users | 后台管理员 | 用户名、密码、角色 |
| bijifenxiang | 笔记分享 | 笔记名称、类型、标签、封面、内容、分享日期、审核状态、审核回复、赞/踩数 |
| gerenbiji | 个人笔记 | 笔记名称、类型、标签、内容、发布日期、赞/踩数 |
| discussbijifenxiang | 笔记评论 | 关联笔记 id、评论人、评论内容、回复内容 |
| forum | 交流互动 | 帖子标题、内容、父节点 id、发布人、状态 |
| storeup | 收藏书单 | 用户 id、收藏对象 id、所属表名、名称、图片、类型 |
| news | 公告信息 | 标题、简介、封面、图文内容 |
| config | 系统配置 | 轮播图等键值配置 |
| token | 登录令牌 | 令牌、用户 id、所属表、过期时间 |
库表整体遵循「一张业务主表对应一个 Controller/Service/Mapper」的生成式组织方式,字段命名统一采用「表名前缀 + 拼音语义」的驼峰约定,配合 MyBatis-Plus 的 db-column-underline 自动完成下划线列与驼峰属性的映射,省去了大量手写结果映射的成本。
设计上有两个值得注意的点。其一,评论表通过 refid 关联笔记主键,回复内容直接内联在评论行上,两层结构一次查询即可带回,避免了多层递归;其二,收藏表用 tablename + refid 的多态引用设计,天然支持未来把公告、帖子等对象也纳入收藏体系,扩展成本低。全部演示数据使用真实公开出版物的书评笔记与中文昵称用户,日期分布合理,开箱即可看到完整的社区氛围。库脚本自带建库语句,导入即用,utf8mb4 字符集保证了生僻书名与人名的正常存储。
五、系统演示
前台首页由固定顶栏、轮播图与公告卡片构成,顶栏集成笔记分享、交流互动、公告信息、个人中心与后台入口:
前台登录页,注册用户使用账号密码登录,登录后按角色加载个人中心菜单:
笔记分享列表以卡片流呈现读书笔记,支持按名称、类型、标签检索,封面、标题与标签一目了然:
笔记详情页左侧为封面与赞踩互动,右侧是笔记的类型、标签、分享日期等元信息,下方笔记内容与评论两个选项卡承载正文和书友讨论:
交流互动区以时间线列出社区帖子,支持标题检索与发布新帖:
帖子详情页包含完整的正文与评论列表,共读活动、漂流互换这类话题在楼下持续展开:
公告信息采用图文混排的详情页,用于共读计划、发布规范等社区运营内容的呈现:
「我的收藏」把用户收藏的笔记聚合为个人书单,支持按名称检索:
管理后台登录页,管理员账号登录后进入后台:
后台笔记审核管理列表展示全部投稿的审核状态、审核回复与笔记图片,管理员可逐条执行查看、修改、删除与审核操作:
六、小结
书岸在线图书分享社区以「读书笔记分享」为核心,串起审核、评论、收藏书单与社区交流的完整链路:SpringBoot 2.2.2 + MyBatis-Plus 构成清晰的分层后端,Shiro 与 Token 拦截器提供轻量可靠的鉴权,前台 Layui 与后台 Vue 各司其职,10 张表的数据模型在多态收藏、两层评论等细节上留足了扩展空间。项目中诸如「默认拦截、注解放行」的鉴权设计、多态引用的收藏表结构、前后台共用接口的组织方式,都可以直接迁移到其他社区类系统的设计中。如果在实现类似的书评分享或笔记社区时遇到问题,欢迎评论区交流。
书岸在线图书分享社区源码 SpringBoot+Vue+MySQL(毕业设计/课程设计)