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

Web作业(八)

API 接口文档

1. 技术架构

┌─────────────────────────────────────────┐ │ 前端层 │ Vue 3 + Element Plus │ │ │ (静态 HTML,CDN 引入) │ ├─────────────────────────────────────────┤ │ Controller │ EmpController │ │ (REST API) │ DeptController │ ├─────────────────────────────────────────┤ │ Mapper 层 │ EmpMapper (MyBatis) │ │ (数据访问) │ DeptMapper (MyBatis) │ ├─────────────────────────────────────────┤ │ 数据库 │ Microsoft SQL Server │ │ │ 库名: 2026shangke │ └─────────────────────────────────────────┘
层级技术说明
框架Spring Boot 3.5.15内嵌 Tomcat,提供 Web 服务
持久层MyBatis 3.0.5注解式 SQL 映射,#{}防注入
数据库SQL Server通过mssql-jdbc驱动连接
前端Vue 3 + Element PlusCDN 引入,无需构建工具
工具Lombok自动生成 getter/setter/toString

2. 统一响应格式

所有接口返回 JSON,结构统一为Result对象:

{"code":1,// 状态码:1 = 成功,0 = 失败"msg":"操作成功",// 提示信息"data":{}// 响应数据(可能是对象、数组或 null)}
字段类型说明
codeInteger1成功,0失败
msgString操作结果的描述信息
dataObject业务数据,查询时返回,增删改时通常为null

3. 员工管理接口

基础路径/api/emps

3.1 查询员工列表(条件搜索)

支持按姓名模糊搜索、性别筛选、入职日期范围筛选。所有参数均可选,不传则不参与筛选。

请求

GET /api/emps?name=&gender=&begin=&end=
参数类型必填说明
nameString员工姓名,模糊匹配(LIKE %xxx%)
genderShort性别:1男,2
beginString入职开始日期,格式YYYY-MM-DD
endString入职结束日期,格式YYYY-MM-DD

请求示例

# 无条件查询全部 GET /api/emps # 按姓名模糊搜索 GET /api/emps?name=张 # 查询所有男员工 GET /api/emps?gender=1 # 查询 2010-01-01 到 2020-12-31 入职的员工 GET /api/emps?begin=2010-01-01&end=2020-12-31 # 组合查询:姓张的男员工,2000年后入职 GET /api/emps?name=张&gender=1&begin=2000-01-01&end=2100-12-31

成功响应200 OK

{"code":1,"msg":"操作成功","data":[{"id":1,"username":"jinyong","password":"123456","name":"金庸","gender":1,"image":"1.jpg","job":4,"entrydate":"2000-01-01","deptId":2,"createTime":"2026-06-24T10:00:00","updateTime":"2026-06-24T10:00:00"},{"id":2,"username":"zhangwuji","password":"123456","name":"张无忌","gender":1,"image":"2.jpg","job":2,"entrydate":"2015-01-01","deptId":2,"createTime":"2026-06-24T10:00:00","updateTime":"2026-06-24T10:00:00"}]}

3.2 根据 ID 查询员工

请求

GET /api/emps/{id}
参数类型必填说明
idInteger员工 ID(路径参数)

请求示例

GET /api/emps/1

成功响应200 OK

{"code":1,"msg":"操作成功","data":{"id":1,"username":"jinyong","password":"123456","name":"金庸","gender":1,"image":"1.jpg","job":4,"entrydate":"2000-01-01","deptId":2,"createTime":"2026-06-24T10:00:00","updateTime":"2026-06-24T10:00:00"}}

失败响应200 OK

{"code":0,"msg":"员工不存在","data":null}

3.3 新增员工

请求

POST /api/emps Content-Type: application/json
参数类型必填说明
usernameString用户名,必须唯一
nameString姓名
genderShort性别:1男,2
jobShort职位编码(详见 数据字典)
deptIdInteger部门 ID
entrydateString入职日期,格式YYYY-MM-DD
passwordString密码,不传则默认为123456
imageString头像文件名,如1.jpg

注意idcreateTimeupdateTime由后端自动生成,不需要传。

请求示例

{"username":"zhangsan","name":"张三","gender":1,"image":"default.jpg","job":2,"entrydate":"2024-06-01","deptId":3}

成功响应200 OK

{"code":1,"msg":"操作成功","data":null}

3.4 修改员工

请求

PUT /api/emps Content-Type: application/json
参数类型必填说明
idInteger要修改的员工 ID
usernameString用户名
nameString姓名
genderShort性别
jobShort职位编码
deptIdInteger部门 ID
entrydateString入职日期
imageString头像文件名
passwordString密码

注意updateTime由后端自动更新。

请求示例

{"id":18,"username":"songdaxia","name":"老宋","gender":1,"image":"2.jpg","job":2,"entrydate":"2012-01-01","deptId":2}

成功响应200 OK

{"code":1,"msg":"操作成功","data":null}

3.5 删除员工

请求

DELETE /api/emps/{id}
参数类型必填说明
idInteger员工 ID(路径参数)

请求示例

DELETE /api/emps/23

成功响应200 OK

{"code":1,"msg":"操作成功","data":null}

4. 部门管理接口

基础路径/api/depts

4.1 查询全部部门

请求

GET /api/depts

无参数,返回所有部门。

成功响应200 OK

{"code":1,"msg":"操作成功","data":[{"id":1,"name":"学工部","createTime":"2026-06-24T10:00:00","updateTime":"2026-06-24T10:00:00"},{"id":2,"name":"教研部","createTime":"2026-06-24T10:00:00","updateTime":"2026-06-24T10:00:00"}]}

4.2 根据 ID 查询部门

请求

GET /api/depts/{id}
参数类型必填说明
idInteger部门 ID(路径参数)

请求示例

GET /api/depts/1

失败响应

{"code":0,"msg":"部门不存在","data":null}

4.3 新增部门

请求

POST /api/depts Content-Type: application/json
参数类型必填说明
nameString部门名称,最长 10 个字符,必须唯一

请求示例

{"name":"财务部"}

成功响应200 OK

{"code":1,"msg":"操作成功","data":null}

4.4 修改部门

请求

PUT /api/depts Content-Type: application/json
参数类型必填说明
idInteger要修改的部门 ID
nameString新的部门名称,最长 10 个字符

请求示例

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

成功响应200 OK

{"code":1,"msg":"操作成功","data":null}

4.5 删除部门

请求

DELETE /api/depts/{id}
参数类型必填说明
idInteger部门 ID(路径参数)

请求示例

DELETE /api/depts/6

⚠️ 如果该部门下有员工,SQL Server 的外键约束可能导致删除失败。

成功响应200 OK

{"code":1,"msg":"操作成功","data":null}

5. 数据字典

5.1 性别枚举

编码含义
1
2

5.2 职位枚举

编码含义
1班主任
2讲师
3学工主管
4教研主管
5咨询师

5.3 部门初始数据

ID部门名称
1学工部
2教研部
3咨询部
4就业部
5人事部

6. 前端页面

页面URL说明
首页http://localhost:8080/index.html系统概览,显示员工/部门统计卡片
员工管理http://localhost:8080/emp.html员工搜索、新增、编辑、删除
部门管理http://localhost:8080/dept.html部门新增、编辑、删除

前端使用 Vue 3 + Element Plus(通过 CDN 引入),无需额外安装依赖,Spring Boot 直接从static/目录提供静态文件服务。

前端调用后端流程

用户操作页面(emp.html) → fetch('/api/emps', {method: 'GET/POST/PUT/DELETE'}) → EmpController 接收请求 → EmpMapper 执行 SQL → SQL Server 数据库 → 返回 Result JSON → 前端解析 response.json() → 更新页面数据



7. 数据库表结构

7.1 员工表(emp)

字段类型说明
idINT IDENTITY(1,1) PRIMARY KEY主键,自增
usernameVARCHAR(20) NOT NULL UNIQUE用户名
passwordVARCHAR(32) DEFAULT '123456'密码,默认 123456
nameVARCHAR(10) NOT NULL姓名
genderTINYINT NOT NULL性别:1 男,2 女
imageVARCHAR(300)头像文件名
jobTINYINT职位编码
entrydateDATE入职日期
dept_idINT部门 ID
create_timeDATETIME2 NOT NULL创建时间
update_timeDATETIME2 NOT NULL修改时间

7.2 部门表(dept)

字段类型说明
idINT IDENTITY(1,1) PRIMARY KEY主键,自增
nameVARCHAR(10) NOT NULL UNIQUE部门名称
create_timeDATETIME2 NOT NULL创建时间
update_timeDATETIME2 NOT NULL修改时间

附录 A:接口速查表

HTTP 方法URL说明
GET/api/emps条件查询员工列表(支持 name/gender/begin/end)
GET/api/emps/{id}根据 ID 查询单个员工
POST/api/emps新增员工
PUT/api/emps修改员工
DELETE/api/emps/{id}删除员工
GET/api/depts查询全部部门
GET/api/depts/{id}根据 ID 查询部门
POST/api/depts新增部门
PUT/api/depts修改部门
DELETE/api/depts/{id}删除部门

附录 B:动态 SQL 说明

员工列表查询接口使用了 MyBatis 动态 SQL,底层对应的 SQL 模板为:

<where><iftest='name != null and name != ""'>and name like concat('%', #{name}, '%')</if><iftest='gender != null'>and gender = #{gender}</if><iftest='begin != null'>and entrydate >= #{begin}</if><iftest='end != null'>and entrydate <= #{end}</if></where>
  • 只有前端传了某个参数,对应的 WHERE 条件才生效
  • #{name}使用预编译参数,天然防止 SQL 注入
  • MyBatis 自动处理多余的AND关键字
http://www.jsqmd.com/news/1099450/

相关文章:

  • 好用的亚洲汽美抛光赛事供应商
  • 实战掌握Adobe软件激活:全面解析GenP 3.0破解工具高效配置
  • 后端性能瓶颈排查实战:从慢接口到系统优化的完整落地思路
  • 66.TIA V17 实测无 BUG!带 20ms 软件滤波、边沿检测、急停联锁 PLC 工程
  • STM32单片机家用智能热水器水温水位检测加热恒温控制无线app设计2(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • 让AI读懂你的大脑:BrainAgent用LLM驱动多Agent实现脑信号全流程自动分析
  • 《Debezium + Kafka Connect 实战:从零搭建 MySQL CDC 数据管道,踩坑全记录》
  • 2026效率榜!好用的降AIGC网站全盘点,过审成功率直接拉满
  • HCIA-Datacom 课程学习心得
  • 金属浮栅提升NAND性能
  • 2026论文顶级降AIGC平台大曝光:一键改写直达人工原创!
  • 基于51单片机智能气象仪 环境检测系统 风速风向采集 温湿度套件2(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • 大部分人都在管别人的闲事
  • 【Claude】Claude Code 代码审查实战指南:一次对话审出 26 个 Bug 的方法论
  • 把 quicklink 的预加载思想搬到 API 层:我设计了一套‘懒请求调度器’,首屏并发从 9 降到了 2
  • Tensor 是什么?PyTorch 里最重要的对象讲清楚
  • 而 C++ 就是这种能自举的编程语言
  • 基于PI外环-FCS-MPC内环的永磁同步电机双环调速系统仿真分析(Simulink仿真实现)
  • GitLab开发流程实践
  • CSDN自动化测试_草稿
  • 【最新测评】有没有降AI率的靠谱网站推荐?2026年实测15款降AI神器,省钱又高效!
  • Go模块管理教程
  • C++继承与多态解析
  • 【Claude】Claude Code CLAUDE.md 记忆系统完全指南:让 AI 永远记得你的项目规范
  • 基于单片机智能点滴控制系统智能输液非接触式液位检测心率监测33(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 临沂GEO技术应用与合规解析
  • 别再搞混了!JVM的Minor GC、Major GC、Full GC 到底有啥区别?
  • Java线程池使用指南
  • Java内存模型全面解析
  • 基于STM32单片机甲烷煤气天然气报警厨房安全火灾报警火焰物联网3(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码