当前位置: 首页 > article >正文

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

目录

数据库设计流程

三张表

测试

接口设计

部门管理接口文档

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.kler.cn/a/590912.html

相关文章:

  • 2、idea里Maven项目如何打成jar或war包
  • 二叉树深度优先搜索:从递归到剪枝六大高频题解析
  • 使用Ajax技术进行动态网页的爬虫(pycharm)
  • 【如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南】
  • 字符串模板(单文件组件、JSX)
  • 3月18号
  • DeepSeek本地部署:从零开始打造安全高效的AI私域环境
  • 基于FPGA的3U机箱温度采集板PT100,应用于轨道交通/电力储能等
  • 【Axios 开发中的代理配置陷阱与解决方案】
  • 从信息熵上看图像
  • Linux 网络基础设置
  • 利用Python爬虫获取Shopee(虾皮)商品详情:实战指南
  • 导出的使用
  • zabbix统计闲置资产
  • centos6.10 编译gcc11.5.0 支持mutilib(32bit,64bit)glibc2.11.3
  • 蓝桥杯备考:特殊01背包问题——》集合subset
  • c++图论(二)之图的存储图解
  • wx142基于django+vue+uniapp的摄影竞赛小程序
  • leetcode-47.全排列II
  • 迷你主机与普通台式电脑区别