这个基于SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0技术栈的学生读书笔记共享平台,是我在指导大学生毕业设计时反复打磨的一个实战项目。它解决了传统纸质读书笔记难以共享、检索不便的核心痛点,通过Web平台实现笔记的数字化管理和知识沉淀。
提示:项目采用前后端分离架构,后端使用SpringBoot2提供RESTful API,前端用Vue3构建交互界面,MyBatis-Plus简化数据库操作,MySQL8.0存储数据。这种技术组合兼顾了开发效率和系统性能。
SpringBoot2作为后端框架,我特别看重它的几个特性:
java复制// 典型Controller示例
@RestController
@RequestMapping("/api/notes")
public class NoteController {
@Autowired
private NoteService noteService;
@GetMapping("/{id}")
public Result<NoteVO> getNote(@PathVariable Long id) {
return Result.success(noteService.getById(id));
}
}
Vue3相比Vue2的主要优势:
javascript复制// 笔记列表组件示例
<script setup>
import { ref } from 'vue'
const notes = ref([])
const fetchNotes = async () => {
const res = await axios.get('/api/notes')
notes.value = res.data
}
</script>
MySQL8.0的特性应用:
sql复制CREATE TABLE `note` (
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`content` text NOT NULL,
`user_id` bigint NOT NULL,
`tags` json DEFAULT NULL,
`view_count` int DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
采用RBAC模型实现权限控制:
关键实现点:
基于Elasticsearch实现:
java复制// 搜索服务实现
public List<Note> search(String keyword) {
NativeSearchQuery query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.multiMatchQuery(keyword, "title", "content"))
.build();
return elasticsearchRestTemplate.search(query, Note.class)
.stream().map(SearchHit::getContent).collect(Collectors.toList());
}
采用分层存储策略:
Docker Compose编排方案:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
redis:
image: redis:alpine
backend:
build: ./backend
depends_on:
- mysql
- redis
nginx复制server {
gzip on;
gzip_types text/plain application/json;
location /api {
proxy_pass http://backend:8080;
}
}
code复制-XX:+UseG1GC -Xms512m -Xmx1024m
properties复制spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.connection-timeout=30000
json复制{
"code": 200,
"message": "success",
"data": {}
}
这个项目经过3次迭代,目前已在多个高校计算机专业作为课程设计案例。实际开发中最大的体会是:技术选型要克制,能用成熟方案就不追新;文档编写要同步,特别是接口文档;测试用例要完备,特别是边界条件。