[快乐学坊management_1] With Cursor | Mysql设计 | 服务接口设计与开发

server/2025/3/19 17:20:55/

目录

数据库设计流程

三张表

测试

接口设计

部门管理接口文档

1. 查询所有部门

2. 新增部门

⭕3. 根据ID查询部门

4. 修改部门

5. 删除部门

(部门分页条件查询)

错误响应示例

接口设计规范

服务端开发

接口开发


数据库设计流程

  • 01 明确业务需求
    • 依据:页面原型+需求文档
    • 目标:确定数据主体/表
  • 02 确定数据关联
    • 关联类型:一对一、一对多、多对多
  • 03 确定字段详情
    • 包括字段、类型、约束
  • 04 构建表结构
    • 目标:建库建表

表结构 参考:


三张表

  • 部门表
  • 员工表
  • 员工详细信息表
  1. dept(部门表)
    • 字段:部门 ID、名称、创建/更新时间
    • 数据示例:学工部、教研部、咨询部等
  1. emp(员工表)
    • 字段:员工 ID、账号、密码、姓名、性别、手机号、职位、薪资等
    • 职位类型:班主任、讲师、学生管理员、教研管理员、咨询师
  1. emp_expr(员工履历表)
    • 字段:履历 ID、员工 ID、起止时间、公司名称、职位

建表

CREATE DATABASE `klxf`;
USE `klxf`;CREATE TABLE `dept` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID, 主键',`name` varchar(10) NOT NULL COMMENT '部门名称',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='部门表';CREATE TABLE `emp` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID,主键',`username` varchar(20) NOT NULL COMMENT '用户名',`password` varchar(50) DEFAULT '123456' COMMENT '密码',`name` varchar(10) NOT NULL COMMENT '姓名',`gender` tinyint unsigned NOT NULL COMMENT '性别, 1:男, 2:女',`phone` char(11) NOT NULL COMMENT '手机号码',`job` tinyint unsigned DEFAULT NULL COMMENT '职位, 1 班主任, 2 讲师 , 3 学工主管, 4 教研主管, 5 辅导员',`salary` int unsigned DEFAULT NULL COMMENT '薪资',`image` varchar(300) DEFAULT NULL COMMENT '头像',`entry_date` date DEFAULT NULL COMMENT '入职日期',`dept_id` int unsigned DEFAULT NULL COMMENT '部门ID',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`),UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工表';CREATE TABLE `emp_expr` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID, 主键',`emp_id` int unsigned DEFAULT NULL COMMENT '员工ID',`begin` date DEFAULT NULL COMMENT '开始时间',`end` date DEFAULT NULL COMMENT '结束时间',`company` varchar(50) DEFAULT NULL COMMENT '公司名称',`job` varchar(50) DEFAULT NULL COMMENT '职位',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='工作经历';

借助 AI 生成测试数据:

INSERT INTO `dept` (`name`, `create_time`, `update_time`) VALUES
('教务处', NOW(), NOW()),
('财务部', NOW(), NOW()),
('招生办', NOW(), NOW()),
('后勤部', NOW(), NOW()),
('技术部', NOW(), NOW()),
('市场部', NOW(), NOW()),
('研发中心', NOW(), NOW()),
('国际部', NOW(), NOW()),
('培训部', NOW(), NOW()),
('质量部', NOW(), NOW()),
('法务部', NOW(), NOW()),
('公关部', NOW(), NOW()),
('审计部', NOW(), NOW()),
('战略部', NOW(), NOW()),
('校友会', NOW(), NOW());INSERT INTO `emp` (`username`, `password`, `name`, `gender`, `phone`, `job`, `salary`, `entry_date`, `dept_id`, `create_time`, `update_time`) VALUES
('zhangsan', '123456', '张三', 1, '13800138001', 2, 15000, '2020-03-15', 1, NOW(), NOW()),
('lisi', '123456', '李思', 2, '13900239002', 1, 8000, '2021-06-20', 2, NOW(), NOW()),
('wangwu', '123456', '王武', 1, '13600336003', 3, 12000, '2019-11-05', 3, NOW(), NOW()),
('zhaoliu', '123456', '赵柳', 2, '13500445004', 4, 18000, '2022-08-12', 4, NOW(), NOW()),
('sunqi', '123456', '孙琦', 1, '13700557005', 5, 9500, '2023-01-30', 5, NOW(), NOW()),
('zhouba', '123456', '周巴', 1, '13300663006', 2, 16000, '2020-09-18', 6, NOW(), NOW()),
('wujiu', '123456', '吴玖', 2, '13200772007', 1, 8500, '2021-04-22', 7, NOW(), NOW()),
('zhengshi', '123456', '郑石', 1, '13100881008', 3, 13000, '2018-07-14', 8, NOW(), NOW()),
('fengshisan', '123456', '冯十三', 2, '15900999009', 4, 20000, '2022-05-09', 9, NOW(), NOW()),
('cheneryi', '123456', '陈二一', 1, '15801010010', 5, 10000, '2023-03-01', 10, NOW(), NOW()),
('huxiaoxiao', '123456', '胡笑笑', 2, '15701111011', 2, 14500, '2020-12-25', 11, NOW(), NOW()),
('linmengmeng', '123456', '林萌萌', 2, '15601212012', 1, 7800, '2021-08-07', 12, NOW(), NOW()),
('maweiwei', '123456', '马威威', 1, '15501313013', 3, 12500, '2019-02-28', 13, NOW(), NOW()),
('huangdaye', '123456', '黄大业', 1, '15301414014', 4, 19000, '2022-10-11', 14, NOW(), NOW()),
('caoxiaoyu', '123456', '曹小雨', 2, '15201515015', 5, 8800, '2023-06-19', 15, NOW(), NOW());INSERT INTO `emp_expr` (`emp_id`, `begin`, `end`, `company`, `job`) VALUES
(1, '2018-03-01', '2020-02-28', '腾讯科技', 'Java开发工程师'),
(2, '2019-05-10', '2021-04-15', '阿里巴巴', '班主任'),
(3, '2017-08-20', '2019-07-25', '字节跳动', '学生管理专员'),
(4, '2020-11-01', '2022-10-31', '华为技术', '教研主管'),
(5, '2021-02-14', '2023-01-30', '百度网络', '辅导员'),
(6, '2016-09-05', '2018-08-10', '京东集团', '前端讲师'),
(7, '2020-07-22', '2022-06-18', '美团点评', '班主任'),
(8, '2018-04-12', '2020-03-20', '滴滴出行', '学工主管'),
(9, '2019-10-05', '2021-09-15', '小米科技', '教研总监'),
(10, '2022-01-08', '2023-12-01', '拼多多', '职业规划师'),
(11, '2017-12-15', '2019-11-30', '网易云音乐', '全栈讲师'),
(12, '2021-03-10', '2023-02-28', '携程旅行', '班主任'),
(13, '2019-06-20', '2021-05-25', '新浪微博', '学生事务经理'),
(14, '2020-08-01', '2022-07-31', '快手科技', '课程研发主管'),
(15, '2022-04-18', '2024-03-15', 'B站', '心理咨询师');

测试

datagrip

测试表结构

测试数据


接口设计

(AI 辅助)

根据部门管理需求及 RESTful 设计规范编写,以部门管理的接口文档为例

部门管理接口文档


1. 查询所有部门

基本信息
请求路径:/depts
请求方式:GET
接口描述:获取所有部门列表(按最后更新时间倒序排列)

请求参数

响应数据

{"code": 1,"msg": "success","data": [{"id": 1,"name": "学工部","createTime": "2023-09-25T09:47:40","updateTime": "2024-08-24T16:54:35"},{"id": 2,"name": "教研部","createTime": "2023-09-25T09:47:40","updateTime": "2024-08-09T15:17:04"}]
}

2. 新增部门
  • 基本信息
    请求路径:/depts
    请求方式:POST
    接口描述:创建新部门

请求参数(JSON Body)

参数名

类型

是否必须

示例

备注

name

string

招生办

部门名称(2-10位)

请求示例

{"name": "招生办"
}

响应数据

{"code": 1,"msg": "success","data": null
}

⭕3. 根据ID查询部门
  • 基本信息
    请求路径:/depts/{id}
    请求方式:GET
    接口描述:通过部门ID获取详细信息

请求参数(路径参数)

参数名

类型

是否必须

示例

备注

id

int

1

部门ID

请求示例

GET /depts/1

响应数据

{"code": 1,"msg": "success","data": {"id": 1,"name": "学工部","createTime": "2023-09-25T09:47:40","updateTime": "2024-08-24T16:54:35"}
}

4. 修改部门

基本信息
请求路径:/depts
请求方式:PUT
接口描述:更新部门信息

请求参数(JSON Body)

参数名

类型

是否必须

示例

备注

id

int

1

部门ID

name

string

学生工作部

部门名称(2-10位)

请求示例

{"id": 1,"name": "学生工作部"
}

响应数据

{"code": 1,"msg": "success","data": null
}

5. 删除部门

基本信息
请求路径:/depts/{id}
请求方式:DELETE
接口描述:根据ID删除部门

请求参数(路径参数)

参数名

类型

是否必须

示例

备注

id

int

3

部门ID(关联员工时不可删除)

请求示例

DELETE /depts/3

响应数据

{"code": 1,"msg": "success","data": null
}

(部门分页条件查询)

基本信息
请求路径:/depts
请求方式:GET
接口描述:根据名称模糊查询部门并分页

请求参数

参数名

类型

是否必须

示例

备注

name

string

教研

部门名称模糊查询

page

int

1

页码(默认1)

pageSize

int

10

每页条数(默认10)

请求示例

GET /depts?name=教&page=1&pageSize=5

响应数据

{"code": 1,"msg": "success","data": {"total": 8,"rows": [{"id": 2,"name": "教研部","createTime": "2023-09-25T09:47:40","updateTime": "2024-08-09T15:17:04"}]}
}

错误响应示例

{"code": 0,"msg": "部门名称已存在","data": null
}

接口设计规范

  1. URL规范
    • 资源使用复数名词:/depts
    • 层级资源:/depts/{id}/employees(如需子资源)
  1. HTTP方法

方法

用途

GET

查询

POST

新增

PUT

全量更新

DELETE

删除

  1. 状态码

状态码

说明

200

成功

400

参数错误

404

资源不存在

409

数据冲突

500

服务器内部错误


服务端开发

(SpringBoot+MyBatis)

借助 cursor 生成框架后,对 springboot 进行一下测试:

浏览器查看:


接口开发

  • 部门管理
  • 员工管理
  • 文件上传
  • 登录认证

(AI 辅助)项目特点:

  1. 使用 Lombok 简化实体类的编写
  2. 统一的返回结果封装(Result类)
  3. 采用 RESTful 风格的 API 设计
  4. 使用 MyBatis 进行数据库操作
  5. 实现基础的 CRUD 功能

再次启动:

下一步:借助 Apifox 来进行 接口测试,下篇文章见~


http://www.ppmy.cn/server/176299.html

相关文章

xss注入实验(xss-lab)

xss-lab 第一关 代码&#xff1a;<Script>alert(1)</Script> 第二关 代码&#xff1a;1"><ScRipt>alert(1)</ScRipt> 第三关 代码&#xff1a; onclick javascript:alert(1)// 第四关 代码&#xff1a;" onclick "javascript:a…

力扣——146.LRU缓存

题目链接&#xff1a; https://leetcode.cn/problems/lru-cache/solutions/259678/lruhuan-cun-ji-zhi-by-leetcode-solution/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述&#xff1a; 思路&#xff1a; 提到key-value一定有map&#xff1b;要实现最近最少使用…

HTML 中如何设置页面的语言,这对 SEO 和无障碍访问有什么影响?

大白话HTML 中如何设置页面的语言&#xff0c;这对 SEO 和无障碍访问有什么影响&#xff1f; 1. HTML 中设置页面语言的方法 在 HTML 里&#xff0c;你可以借助 <html> 标签的 lang 属性来设定页面的语言。lang 属性的值是一个符合 ISO 639 - 1 标准的双字母语言代码&a…

Python 基础知识整理笔记

闹麻了&#xff0c;因为各种原因&#xff0c;现在需要重新回顾一下Python&#xff0c;话不多说&#xff0c;开始吧 1. Python是解释型语言 && Python与C代码执行过程的区别&#xff1a; &#xff08;1&#xff09;C 源码&#xff08;Source&#xff09;&#xff1a;C的…

centos 7误删/bash 拯救方法

进入救援模式 1. 插入CentOS 7安装光盘&#xff0c;重启系统。在开机时按BIOS设置对应的按键&#xff08;通常是F2等&#xff09;&#xff0c;将启动顺序调整为CD - ROM优先。 2. 系统从光盘启动后&#xff0c;选择“Troubleshooting”&#xff0c;然后选择“Rescue a Cent…

前端主题切换架构设计方案

1. 架构概述 本文档从架构设计的角度阐述项目的主题切换方案,主要关注系统各层级间的关系、数据流转以及扩展性设计,而非具体实现细节。 架构图 +-------------------------------------------+ | 用户界面层 | | +--------------+ …

基于javaweb的SpringBoot博客商城管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

迁移学习入门

迁移学习 1 迁移学习的概念 预训练模型 定义: 简单来说别人训练好的模型。一般预训练模型具备复杂的网络模型结构;一般是在大量的语料下训练完成的预训练语言模型的类别 现在我们接触到的预训练语言模型,基本上都是基于transformer这个模型迭代而来的 因此划分模型类别的时…