当代中国作家信息管理系统是一个基于SpringBoot+Vue3+MyBatis技术栈构建的现代化Web应用,专为文学研究机构、出版社和文学爱好者设计。系统实现了对当代中国获奖作家信息的数字化管理,包含作品收录、获奖记录、生平事迹等核心功能模块。
我在实际开发中发现,这类文化类信息管理系统最关键的挑战在于如何平衡数据的权威性与系统的易用性。传统Excel表格管理方式难以应对作家作品的动态更新需求,而市面上的通用CMS系统又缺乏针对文学领域的专业字段设计。
系统采用典型的前后端分离架构:
这种架构的优势在于:
实际部署时建议使用Nginx作为反向代理,将前端打包后的静态文件与后端API服务统一管理
sql复制CREATE TABLE `author` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '作家姓名',
`pen_name` varchar(50) DEFAULT NULL COMMENT '笔名',
`birth_date` date DEFAULT NULL COMMENT '出生日期',
`native_place` varchar(100) DEFAULT NULL COMMENT '籍贯',
`introduction` text COMMENT '作家简介',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `award` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '奖项名称',
`level` tinyint DEFAULT '1' COMMENT '奖项级别(1-国家级,2-省级)',
`found_year` int DEFAULT NULL COMMENT '创立年份',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
注意:对于获奖记录这类频繁查询但更新较少的表,建议添加适当的索引优化查询性能
yaml复制# application.yml关键配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/author_db?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
jackson:
date-format: yyyy-MM-dd
time-zone: GMT+8
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: deleted # 逻辑删除字段
logic-delete-value: 1
logic-not-delete-value: 0
java复制@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
java复制@Data
public class PageParam {
@ApiModelProperty(value = "页码", example = "1")
private Integer pageNum = 1;
@ApiModelProperty(value = "每页数量", example = "10")
private Integer pageSize = 10;
public <T> Page<T> buildPage() {
return new Page<>(pageNum, pageSize);
}
}
作家信息展示组件示例:
vue复制<template>
<div class="author-card">
<el-image
:src="author.avatar"
fit="cover"
class="avatar"
></el-image>
<div class="info">
<h3>{{ author.name }}</h3>
<p v-if="author.penName">笔名:{{ author.penName }}</p>
<el-tag
v-for="award in author.awards"
:key="award.id"
type="success"
>
{{ award.name }}
</el-tag>
</div>
</div>
</template>
<script setup>
defineProps({
author: {
type: Object,
required: true
}
})
</script>
使用Pinia管理全局状态:
javascript复制// stores/author.js
import { defineStore } from 'pinia'
export const useAuthorStore = defineStore('author', {
state: () => ({
currentAuthor: null,
searchResults: []
}),
actions: {
async fetchAuthor(id) {
const res = await api.getAuthorDetail(id)
this.currentAuthor = res.data
},
async searchAuthors(params) {
const res = await api.searchAuthors(params)
this.searchResults = res.data
}
}
})
Docker-compose示例:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: author_db
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
frontend:
build: ./frontend
ports:
- "80:80"
GitHub Actions配置示例:
yaml复制name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build backend
run: |
cd backend
mvn clean package
- name: Build frontend
run: |
cd frontend
npm install
npm run build
后端配置CORS:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.maxAge(3600);
}
}
SpringBoot配置:
yaml复制spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 20MB
前端Element Plus上传组件处理:
vue复制<el-upload
:action="uploadUrl"
:on-exceed="handleExceed"
:limit="3"
>
<el-button type="primary">点击上传</el-button>
</el-upload>
<script setup>
const handleExceed = () => {
ElMessage.warning('每次最多上传3个文件')
}
</script>
在实际开发中,我发现作家照片的版权管理是个容易被忽视的问题。建议在系统中增加图片来源记录功能,对每张上传的作家肖像都要求填写授权信息,避免后续版权纠纷。同时,对于获奖作品这类关键数据,最好实现修改留痕功能,记录每次数据变更的操作人和时间。